【问题标题】:Jasmine spy and resolving promises茉莉花间谍和解决承诺
【发布时间】:2016-01-08 16:04:56
【问题描述】:

我正在测试一个使用返回承诺的服务的控制器。我在测试中模拟了一项服务并创建了一个spy,以便我可以测试该服务是否被实际调用。

但我不断收到此错误

TypeError: 'undefined' is not a function 
    (evaluating 'spyOn(mockService, 'one').andReturn(deferred.promise)')

我的测试

beforeEach(inject(function($rootScope, $controller, $q) {
  scope = $rootScope.$new();

  mockService = {
    one: function(){
      // mock promise
      var deferred = $q.defer();
      deferred.resolve([
        //my array
      ]);
      return deferred.promise;
    },
    two: function(){
      // mock promise
      var deferred = $q.defer();
      deferred.resolve([
        //my data
      ]);
      return deferred.promise;
    }
  }
  var deferred = $q.defer();
  spyOn(mockService, 'one').andReturn(deferred.promise);

  controller = $controller('MyCtrl', {
    $scope: scope,
    mockService: mockService
  });
}));

it('should call mockService service', function(){
  //causes promises to check to see if they are fulfilled
  scope.$digest();
  expect(mockService.one).toHaveBeenCalled();
});

【问题讨论】:

  • 你用的是哪个版本的茉莉花?
  • 更正:jasmine 2.4.1版

标签: javascript angularjs unit-testing karma-jasmine


【解决方案1】:

对于 Jasmine 2,您必须使用

spyOn(mockService, 'one').and.returnValue(deferred.promise);

而不是andReturn()

Read the docs。如果您要从 Jasmine 1 迁移到 Jasmine 2,您可能还想read this

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2014-01-25
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多