Integration tests catch contract mismatch
Login succeeds but the username never appears because a data format changed quietly yesterday.
All unit tests stay green, so the fault lives in integration between modules, not inside functions.
I run integration tests with real data so format mismatch surfaces before it reaches production.
Semaphore places integration tests in the middle to check code against databases without UI clicks.
They run slower than unit tests yet far faster than full E2E tests across browsers.
If Small unit tests give fast feedback covers logic, then CI gates every change early checks integration on each merge.
I use them whenever a new feature touches databases or other APIs before release.