我正在使用Sinon和Mocha来测试一些过期日期值。几个月前我使用了相同的代码并且工作正常,但是在v1.12.x和v1.17.x之间,有些东西发生了变化,我似乎无法找到正确的路径。
let sinon = require('sinon');
describe('USER & AUTHENTICATION ENDPOINTS', function(done) {
beforeEach(function() {
this.clock = sinon.useFakeTimers(new Date().getTime());
return fixtures.load(data);
});
afterEach(function() {
this.clock.restore();
return fixtures.clear(data);
});
context('POST /users', function() { ... }
});
new Date().getTime()
参数。done()
。最终结果总是一样:
Error: timeout of 5000ms exceeded. Ensure the done() callback is being called in this test.
有什么改变我在文档中没有注意到吗?我在那里有一些我看不到的错误吗?
任何想法都会受到赞赏。
更新
这里有更多信息。这显然与我的代码有关,但我不知所措。
如果我评论每个实际测试,测试运行并给我一个绿色的“0传递”。
如果我进行实际测试,即使是这样的测试:
context('POST /users', function() {
it('should create a new user', function(done) {
done();
})
});
我马上回到了暂停状态。我错过了什么?
答案 0 :(得分:3)
Mystery solved。它似乎是Sinon和Knex版本之间的冲突。 0.7.6。
似乎是因为
来修复pool2
依赖于setTimeout
的行为。使用sinon.useFakeTimers(...)
替换了几种方法,包括setTimeout
和同步版本,这些方法打破了它。可以通过替换为clock = sinon.useFakeTimers(Number(date), 'Date')
;
我的原始代码是在Knex v0.7.6是最新版本的世界中编写的。现在,尽管代码本身是相同的,但并非一切都失败了。我使用了上面提到的修复程序,看起来没问题。
答案 1 :(得分:1)
您正在将done
传递给第2行的describe
回调:
describe('USER & AUTHENTICATION ENDPOINTS', function(done) {
Mocha希望您调用它...要消除超时错误,只需从回调中删除done
参数。