Jasmin Mock $ http(然后,抓住)

时间:2016-10-12 14:26:05

标签: javascript angularjs jasmine

我已经使用以下代码测试以下代码示例。

function loadAccounts() {
  return AccountCaller.loadAccounts()
  .then(function(response){
    AccountsModel.accounts = response.accounts;
  })
  .catch(function(error){
    ErrorHandler.raise(error);
  });
}

var spy= spyOn(mock, 'loadAccounts').andCallFake(function () {
        return {
            then: function (callback) {
                return callback(response);
            }
        };
    });

上面的代码在'.then'上运行正常,但我最近引入了'.catch',现在我的测试失败'TypeError:无法读取属性'catch'of undefined'。

关于我如何处理'.catch'元素的任何想法,如果我删除它然后代码测试运行正常!!!

干杯

1 个答案:

答案 0 :(得分:4)

then的间谍中,你有return callback(response);,但你的回调不会返回任何内容,这就是你错误中undefined的原因。您返回的内容至少需要附加某种catch方法。您可以使用以下内容进行测试:

var spy= spyOn(mock, 'loadAccounts').andCallFake(function () {
    return {
        then: function (callback) {
            callback(response);
            return {catch: function() {}};
        }
    };
});

^^这不一定是我怎么做的,但它应该让你朝着正确的方向前进。请考虑返回包含在callback(response)中的Promise的结果。