【问题标题】:Unit testing a promise where the input params are invalid单元测试输入参数无效的承诺
【发布时间】:2015-02-19 01:59:43
【问题描述】:

我正在尝试对一个承诺进行单元测试 ["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;

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

单元测试:

 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();
    });

【问题讨论】:

  • 几乎每个 promise 库都弃用了 deferreds - 只是说您可能需要考虑 promise 构造函数。
  • 你使用什么库进行单元测试?
  • 已更新,“q”:“^1.1.2”。单元测试 chai、mocha。
  • 不是 promise 库 - 单元测试库

标签: javascript node.js unit-testing promise


【解决方案1】:

您的代码确实没有返回 Promise:

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

它返回undefined。所以,用下一个方法修复它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多