angularjs避免范围。$ watch在单元测试期间被触发

时间:2015-08-04 17:07:52

标签: angularjs angularjs-scope jasmine karma-jasmine

我正在写一个angularjs应用程序,在其中一个控制器中,我有一个关于服务方法的监视表达式:

[text] =>

在我的单元测试中,我模拟了CodeService。在测试控制器的其他部分时,如何防止手表被触发?

2 个答案:

答案 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);
  ...
});

这会发射一次,但之后再也不会发射。