angularjs避免范围。$watch在单元测试期间被触发
我正在编写angularjs应用程序,在其中一个控制器中,我有一个关于服务方法的watch表达式:angularjs避免范围。$watch在单元测试期间被触发,angularjs,angularjs-scope,jasmine,karma-jasmine,Angularjs,Angularjs Scope,Jasmine,Karma Jasmine,我正在编写angularjs应用程序,在其中一个控制器中,我有一个关于服务方法的watch表达式: $scope.$watch(CodeService.getCode, function(code){ //Some code }); 在我的单元测试中,我模拟代码服务。当我测试控制器的其他部分时,如何防止手表被触发?一种可能的解决方案是使用spyOn进行code服务。getCode始终返回相同的值。这可能看起来像这样: beforeEach(function() { ... spyOn
$scope.$watch(CodeService.getCode, function(code){
//Some code
});
在我的单元测试中,我模拟代码服务。当我测试控制器的其他部分时,如何防止手表被触发?一种可能的解决方案是使用
spyOn
进行code服务。getCode
始终返回相同的值。这可能看起来像这样:
beforeEach(function() {
...
spyOn(CodeService, 'getCode').andReturn(false);
...
});
这将触发一次,但此后不应再次触发。如果没有更多上下文,很难判断最佳方式,但一个简单的方法是模拟
$scope。$watch
:
var watchSpy = spyOn($scope, '$watch').and.callFake(function(value, callback) {});
您还可以测试它是否被正确调用:
expect(watchSpy).toHaveBeenCalledWith(CodeService.getCode, jasmine.any(Function))
如果您只是想模拟这个特定的手表,您可以存根getCode
始终返回相同的值:
spyOn(CodeService, 'getCode').andReturn(0);
谢谢你的回复。问题是,即使手表被调用一次,测试也会失败。