我正在写一个angularjs应用程序,在其中一个控制器中,我有一个关于服务方法的监视表达式:
[text] =>
在我的单元测试中,我模拟了CodeService。在测试控制器的其他部分时,如何防止手表被触发?
答案 0 :(得分:1)
如果没有更多的背景,很难说出最好的方法,但一种直截了当的方式就是模仿$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);
答案 1 :(得分:0)
一种可能的解决方案是使用spyOn
使CodeService.getCode
始终返回相同的值。这看起来像这样:
beforeEach(function() {
...
spyOn(CodeService, 'getCode').andReturn(false);
...
});
这会发射一次,但之后再也不会发射。