我正在编写一个测试承诺返回函数的测试套件。这些测试的一个共同主题是需要在传递无效参数时检查promise-returns函数是否正确抛出错误。我尝试过使用should.throws,但在查看代码时,我发现它并不适用于promises。
我已经使用以下实用程序函数来获得我需要的功能:
var TestUtil = module.exports;
var should = require('should');
/**
* Checks if a promise chain throws an error, and optionally that the error includes
* the given errorMsg
* @param promise {String} (optional) error message to check for
* @param errorMsg
*/
TestUtil.throws = function(promise, errorMsg) {
return promise
.then(function(res) {
throw new Error(); // should never reach this point
})
.catch(function(e) {
if (errorMsg) {
e.message.should.include(errorMsg);
}
should.exist(e);
});
};
是否存在执行同样事情的shouldjs函数?我想通过仅使用shouldjs api进行检查来保持我的测试的凝聚力,而不是使用这种一次性函数。
答案 0 :(得分:1)
正如den bardadym所说,我正在寻找的是.rejectedWith,这是唯一的承诺断言函数之一。您可以像这样使用它(直接从shouldjs的API文档中复制):
function failedPromise() {
return new Promise(function(resolve, reject) {
reject(new Error('boom'))
})
}
failedPromise().should.be.rejectedWith(Error);
failedPromise().should.be.rejectedWith('boom');
failedPromise().should.be.rejectedWith(/boom/);
failedPromise().should.be.rejectedWith(Error, { message: 'boom' });
failedPromise().should.be.rejectedWith({ message: 'boom' });
// test example with mocha it is possible to return promise
it('is async', () => {
return failedPromise().should.be.rejectedWith({ message: 'boom' });
});