我有一个 node.js + express 网络服务器,我正在用 Mocha 进行测试。我在测试工具中启动 Web 服务器,并连接到 mongodb 以查找输出:
describe("Api", function() {
before(function(done) {
// start server using function exported from another js file
// connect to mongo db
});
after(function(done) {
// shut down server
// close mongo connection
});
beforeEach(function(done) {
// empty mongo collection
});
describe("Events", function() {
it("Test1", ...);
it("Test2", ...);
it("Test3", ...);
it("Test4", ...);
it("Test5", ...);
});
});
如果 Mocha 一次运行超过 4 个测试,则会超时:
4 passing (2s)
1 failing
1) Api Test5:
Error: timeout of 2000ms exceeded
at null.<anonymous> (C:\Users\<username>\AppData\Roaming\npm\node_modules\moch\lib\runnable.js:165:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
如果我跳过5 个测试中的任何一个,它就会成功通过。如果我重新排序测试(它总是最后一个超时),也会出现同样的问题。将测试分组也不会改变事情。
从戳到它,最终测试的请求正在发送到 Web 服务器(使用 http 模块),但没有被 express 接收。有些测试提出一个请求,有些则不止一个。它不影响我跳过的结果。我无法在摩卡咖啡之外复制这种行为。
到底是怎么回事?