【发布时间】:2013-10-21 13:50:07
【问题描述】:
我有一个 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 接收。有些测试提出一个请求,有些则不止一个。它不影响我跳过的结果。我无法在 mocha 之外复制这种行为。
到底发生了什么?
【问题讨论】:
-
我假设你总是打电话给
done?另外,您的测试是否有机会使用http? -
我总是打电话给
done(或者至少,将它传递给回调)。我正在使用http向网络服务器发出请求。
标签: node.js mongodb express mocha.js