当Express异步路由处理程序抛出错误(不会捕获)时,它将不会传递给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单元测试?)