是否存在模仿should.throws for promise的shouldjs函数?

时间:2016-04-02 16:36:38

标签: javascript promise should.js

我正在编写一个测试承诺返回函数的测试套件。这些测试的一个共同主题是需要在传递无效参数时检查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进行检查来保持我的测试的凝聚力,而不是使用这种一次性函数。

1 个答案:

答案 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' });
});