Beyond the basicsIntermediate8h

Testing the backend.

Unit, integration, and contract tests for services.

What is backend testing?

Backend testing proves your service behaves correctly without manually poking it every time. Unit tests check single functions, integration tests check the service against a real database, and contract tests check that an API still matches what its consumers expect.

Why it matters

Tests are what let you change code without fear. A backend without them gets slower to work on over time, because every change risks breaking something unseen. Teams expect tests, and the ability to write good ones — fast, deterministic, meaningful — is a core professional skill.

What to learn

  • The testing pyramid: many unit, fewer integration, few end-to-end
  • A test runner like Vitest or Jest
  • Testing API routes against a real test database
  • Test data setup and teardown, and isolation between tests
  • Mocking external services, and when not to
  • Contract tests so an API change does not silently break clients
  • Running tests in CI on every push

Common pitfall

Mocking the database in every test. Mocks that simulate your database test your assumptions, not reality — they pass while the real query is wrong. Use a real (disposable) database for integration tests so you catch the schema and query bugs that mocks hide.

Resources

Primary (free):

Practice

Write tests for one API endpoint at two levels: a unit test for its validation logic, and an integration test that runs the route against a real test database and checks the stored result. Wire both into CI. Done when a broken query fails the integration test, not just the unit test.

Outcomes

  • Apply the testing pyramid to a service.
  • Write integration tests against a real test database.
  • Mock external services without mocking your own database.
  • Add a contract test that catches breaking API changes.
Back to Backend roadmap