Route tests give me fast feedback about the API contract without needing a full browser. I structure the app so I can import an app instance without binding a port, then use supertest to make requests. The key detail is determinism: stub time and randomness, and use a test database (or a transaction that rolls back) so tests don’t leak state. I assert on both status code and response shape because clients depend on both. When a bug slips in, a focused route test is often the cheapest way to lock in the fix. It’s not a replacement for end-to-end tests, but it covers a lot of ground quickly and keeps regressions from creeping back.