2016-10-21 46 views
1
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(); 
    }); 
}); 

}); 

喜的特性“service.method”,我写的角度测试用例我单独module.Unfortunately,我模块上方击穿我的测试情况下,收到错误debug.js: 44未捕获类型错误:无法读取未定义的属性'获取配置'。我在控制器的初始化时发射getConfigurations功能请低于遗漏的类型错误:无法读取未定义

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

一看,我认为茉莉花的间谍,只检查是否函数被调用,不费一枪实际执行。这就是为什么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未捕获的错误:getConfigurations已经在

窥探请指正我做错了。 在此先感谢

+0

你能告诉我们这是debug.js LN 44? –

回答

1

要么你嘲笑它,要么尽可能注入它。

你正在为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); 
}) 
+0

嗨,感谢您的回复。 UtilsService是所有模块的通用服务,所以对于这个我是注入模块(function(_ $ provide_){ _ $ provide_.value('UtilsService',mockUtilsService); }); –

相关问题