未捕获类型错误:无法读取未定义的属性'service.method'


describe('Controller:insightSettingsController', function() {
'use strict';
var insightSettingsCtrl;
var settingsService;
var UtilsService;
var scope;
var updateMethodDeferred;
var httpBackend;
var deferred;
var q;
var spy;
beforeEach(module('ui.router',proname.components.insightSettings.module.name));
beforeEach(function() {
var mockUtilsService = {};
module(function(_$provide_) {
  _$provide_.value('UtilsService', mockUtilsService);
});
inject(function($q) {
  deferred = $q.defer();
  mockUtilsService.getConfigurations = function() {};
  spyOn(mockUtilsService, 'getConfigurations')
      .and.returnValue(deferred.promise);
});
});
beforeEach(inject(function(
  _$controller_, _$httpBackend_, _$rootScope_, _settingsService_,
  _UtilsService_, _$q_) {
  scope = _$rootScope_.$new();
  spy = jasmine.createSpy();
  settingsService = _settingsService_;
  UtilsService = _UtilsService_;
  httpBackend = _$httpBackend_;
  insightSettingsCtrl = function() {
  return _$controller_(
      dbmcm.components.settings.insightSettingsController,
      {$scope: scope, UtilsService: UtilsService});
};
}));
describe(
'Check Existing Function , parameters, Initialization of function',
function() {
it('should call UtilsService.getConfigurations() once',
  function() {
    insightSettingsCtrl();
    deferred.resolve();
    scope.$digest();
    expect(UtilsService.getConfigurations).toHaveBeenCalled();
  });
});
});

嗨,我正在为我的单独模块编写角测试用例。不幸的是,我上面的模块打破了我的测试用例,得到错误debug.js:44 Uncaught类型错误:无法读取未定义的属性'get Configurations'。我在控制器初始化时触发getConfigurations函数,请查看下面的

 constructor: function(UtilsService) {
 UtilsService.getConfigurations().then(function(response) {
   this.utilsConfig_ = response;
 }.bind(this));
}

我认为Jasmine的间谍只检查函数是否被调用,而不触发实际的实现。这就是getConfigurations()的原因。然后抛出一个错误。为此,我在测试用例

中应用了.and.callThrough()
it('should call UtilsService.getConfigurations() once',
  function() {
   spyOn(UtilsService, 'getConfigurations').and.callThrough();
    insightSettingsCtrl();
    deferred.resolve();
    scope.$digest();
    expect(UtilsService.getConfigurations).toHaveBeenCalled();
  });
});

之后我得到debug.js:44 Uncaught Error: getConfigurations已经被监视到

请纠正我做错的地方。提前感谢

你要么模仿它,要么尽可能注入它。

你在为UtilsService做这两件事。

我假设你注射了UtilsService

因此,删除以下代码:
module(function(_$provide_) {
  _$provide_.value('UtilsService', mockUtilsService);
});
inject(function($q) {
  deferred = $q.defer();
  mockUtilsService.getConfigurations = function() {};
  spyOn(mockUtilsService, 'getConfigurations')
      .and.returnValue(deferred.promise);
})

最新更新