我正在mocha
针对外部Web服务运行许多集成测试。我superagent-promise
用于请求/响应处理,并且正在expect
用作我的断言库。
对于其中的一些测试,我需要将大量请求链接在一起,因此,promise非常有用。但是,我注意到我的测试现在失败,原因是超时(并且没有错误消息),而不是错误消息本身。作为一个简单的例子:
it('[MESSAGES-1] cannot be posted without an auth token', function(done) {
agent.post(config.webRoot + '/rooms/ABC/messages').send({
content: 'This is a test!'
}).end().then(function(res) {
// Not expected
}, function(err) {
expect(err.status).toBe(401)
done()
})
})
可以正常工作并通过:
Messages
✓ [MESSAGES-1] cannot be posted without an auth token
但是,如果我更改断言以期望使用不同的状态代码:
expect(err.status).toBe(200) // This should fail
然后测试失败并超时!
1) Messages [MESSAGES-1] cannot be posted without an auth token:
Error: timeout of 1000ms exceeded. Ensure the done() callback is being called in this test.
这是个常见的问题吗?有什么解决方法或可以调整的地方吗?我不想失去使用诺言的能力。
这是一个已知的问题?
这实际上不是问题。
问题是expect(err.status).toBe(200)
抛出了一个错误,该错误被吞噬了.then
并且导致代码永远无法到达done()
。您应该将代码重组为以下内容:
it('[MESSAGES-1] cannot be posted without an auth token', function(done) {
agent.post(config.webRoot + '/rooms/ABC/messages').send({
content: 'This is a test!'
}).end()
.then(function(res) {
// Not expected
}, function(err) {
expect(err.status).toBe(401)
done()
})
.catch(function(err) {
done(err); //report error thrown in .then
})
})
这样,您就可以捕获并报告引发的错误expect(err.status).toBe(200)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句