API Testing
๐ Covered in this chapter:
Testing Routes & Controllers ยท Supertest ยท Mocking the Database ยท Integration Test DB
Test your Express routes and controllers end-to-end using Supertest, including mocked databases and authentication.
1API Testing โ What You'll Learn
Test your Express routes and controllers end-to-end using Supertest, including mocked databases and authentication.
Here's everything this chapter covers, in the order you'll learn it:
- Testing routes
- Testing controllers
- Testing services in isolation
- Testing validation logic
- Testing authentication flows
- Testing database operations
- Mocking the database in unit tests
- Using Supertest for HTTP-level integration tests
- Setting up a dedicated integration test database
- Testing error responses
- Measuring test coverage
- Running tests in CI
2Working Example
๐ป Example: API Testing
JavaScript
โถ Run in Compiler
import request from "supertest";
import app from "../src/app.js";
test("GET /api/courses returns 200", async () => {
const response = await request(app).get("/api/courses");
assert.equal(response.status, 200);
});
3Best Practices & Common Pitfalls
๐ก Key things to remember:
- Supertest lets you test real HTTP requests against your Express app in memory, without needing to actually start a server on a port.
โ Frequently Asked Questions (FAQ)
Q What's the most important thing to understand about api testing?
Focus on: Testing Routes & Controllers ยท Supertest ยท Mocking the Database ยท Integration Test DB. These are the core building blocks this chapter's examples are built around, and they show up repeatedly in later chapters of this course.
Q Do I need external npm packages for api testing?
Only where explicitly shown in the code examples above (like Express, Zod, or Socket.IO) โ otherwise, this chapter relies entirely on Node.js's own built-in capabilities.