【发布时间】:2017-09-24 06:45:55
【问题描述】:
我正在处理的这个项目有一堆单元测试,并且项目构建正在由运行这些测试的 Jenkins 检查。
我遇到的问题是:每当我在本地运行测试时,都不会出现错误。无论我是单独测试文件还是对整个项目运行测试,一切正常。
但是,每当我推送任何提交时,Jenkins 总是返回此错误:
timeout of 20000ms exceeded. Ensure the done() callback is being called in this test.
我不知道为什么,因为当我在本地测试它时它可以工作,而且我确定我在测试中调用了 done()。此外,始终是相同的两个单元测试在 Jenkins 上始终因超时而失败,但从未在我们的任何机器上本地失败。
测试如下所示:
it('should provide result', function(done) {
this.timeout(20000);
server.get(`/api/model/function/${token}`)
.set('Authorization', access_token)
.expect(200)
.end((err, res) => {
assert.equal(res.status, 200, 'expects status equal to 200');
done(err);
});
});
我也尝试将其重写为一个看起来像的承诺
it('should provide result', function(done) {
server.get(`/api/model/function/${token}`)
.set('Authorization', access_token)
.then(res => {
assert.equal(res.status, 200, 'expects status equal to 200');
done();
});
});
这给出了相同的结果:在本地工作正常,但在 Jenkins 中不行。
我环顾四周,看到人们建议在末尾添加 .catch(done) 或 .catch(err => { done(err) }),但这只会导致我出现错误 Done() called multiple times。
我们将不胜感激有关此问题的任何帮助。
【问题讨论】:
标签: javascript unit-testing jenkins mocha.js