茉莉花模拟一个带有回调参数的外部API函数

时间:2019-05-16 17:45:50

标签: javascript unit-testing jasmine mocking

我正在为post方法调用外部API方法,但无法使用茉莉花掩盖它。

我已经使用window对象模拟了外部API函数,并创建了一个通过返回一些对象来模拟回调的函数。但是没有帮助。

JavaScript

function loadApi() {
  extAPI.load({
    email: 'testEmail.test.com'
  }, function(resultObject) {
     if(resultObject.approved) {
       // callback with result object - not able to cover this
     }
  });
}

Spec.js和模型

beforeEach(function() {
  function mockLoadCallback() {
            var object = {
              approved: false
            };

            return object;
        }
  widnow.extAPI = {
       load: function(object, Function) {
                    var deferred = $.Deferred();

                    deferred.resolve(mockLoadCallback);

                    return deferred.promise();
        }
  }

});

it('load the external API response', function() {
  var loadSpy = spyOn(extAPI, 'load');
  loadApi();
  expect(loadSpy).toHaveBeenCalled();
});
应当涵盖加载回调中的

陈述和逻辑,但甚至不能在间谍之后进行调用。我在这里做错了什么。

1 个答案:

答案 0 :(得分:0)

在调用spyOn`之后,您缺少.and.callThrough()。您的测试应如下所示:

it('load the external API response', function() {
  var loadSpy = spyOn(extAPI, 'load').and.callThrough();
  loadApi();
  expect(loadSpy).toHaveBeenCalled();
});

callThrough方法可确保在调用间谍程序之后,间谍程序将其委托给原始行为。