Когда обработчик экспресс-асинхронного маршрута выдает ошибку (которую он не перехватывает), она не будет передана в next()
, поэтому она не попадет в промежуточное ПО для обработки ошибок.
Я хочучтобы смоделировать это в тесте:
import * as request from "supertest";
const router = express.Router();
router.route("/boom").post(async (req, res, next) => { throw new Error(); });
router.use((err, req, res, next) => { res.status(500).json("caught!"); });
const app = express();
app.use(router);
test("uncaught error"), done => {
request(app)
.post("/boom")
.end((err, res) => { // never gets here
expect(err).toBeTruthy();
expect(res.status).not.toBe(500);
expect(res.body).not.toBe("caught!");
done();
});
});
Однако даже в тесте ошибка не обнаруживается и время ожидания истекает.Таким образом, тест не пройден.
Как я могу это обнаружить?
(КСТАТИ: супер-тест делает интеграционное тестирование ... могу ли я сделать это без супер-теста, просто блок Jestпроверить?)