выносишь всю логику из контроллеров. и тестируешь ее как любой другой код — jest, mocha и т.п.
если нужно и контроллеры (роуты) тестировать, то есть удобные штуки типа supertest
у меня еще один дурацкий кейся, есть роуты step1, step2, step3, status, и по всем роутам нужно пройтись (вызвать) в нужном порядке, с нужными параметрами, все собирается через бд, это и есть цельная логика, которая разбита на части, которую хотелось бы затестить в целом как она работает.