【问题标题】:Jasmine mocking a external API function with a callback argumentJasmine 使用回调参数模拟外部 API 函数
【发布时间】:2019-05-16 17:45:49
【问题描述】:

我正在为 post 方法调用外部 API 方法,但我无法使用 jasmine 覆盖它。

我已经使用 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();
});

应该覆盖加载回调中的语句和逻辑,但甚至不应该在间谍之后调用。我在这里做错了什么。

【问题讨论】:

    标签: javascript unit-testing jasmine mocking


    【解决方案1】:

    在调用 spyOn` 后,您丢失了 .and.callThrough()。您的测试应如下所示:

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

    callThrough 方法确保在调用 spy 后,spy 会委托给原始行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多