对输入参数无效的承诺进行单元测试

Unit testing a promise where the input params are invalid

我正在尝试对承诺进行单元测试 ["q": "^1.1.2"];当没有抛出错误时,以下代码有效。我需要验证正确处理错误的预期行为。

代码:

 Service.prototype.getItem = function (itemId) {
    var deferred = Promise.defer();

    // Ensure
    if (typeof itemId !== 'string' || itemId === '') {
        return deferred.reject(new Error('itemId is a required field'));
    }
  .... 
    // do some logic at return item
    return deferred.resolve(item);
  ....

  return deferred.promise;

由于该方法没有 return 承诺,我无法测试它的错误处理!服务是否有更好的方法来处理承诺,但如果其中一个参数错误,则 return 出错。

单元测试:

 it('Call Service - should throw an error', function (done) {
        Service.getItem('')
            .then(function (item) {})
            .catch(function (err) {
                expect(err).not.to.be.empty();
                done()
            }).done();
    });

您的代码确实没有return Promise:

return deferred.reject(new Error('itemId is a required field'));

它return undefined。所以,接下来修复它:

return Promise.reject(new Error('itemId is a required field'));