我如何在Jasmine中测试$ scope.watch(AngularJS)的变化?

Mik*_*ier 36 jquery jasmine jasmine-jquery angularjs angularjs-directive

我刚刚开始用AngularJS写一些东西,我不知道如何为这个特殊的东西编写测试.我正在建立一个具有不同状态的"帮助请求"模式.所以在我的控制器中,我使用$ scope.request_mode变量.激活帮助请求的不同链接将该变量设置为不同的变量.

然后在我的指令中,我正在做一个$scope.$watch('request_mode', function(){...});选择性激活或停用事物,因为请求模式发生了变化.代码都很好用,但我遇到的问题是测试.我似乎无法让Jasmine拿起$scope.$watch并且在它发生变化时实际开火.

我敢肯定有人之前遇到过这种情况,所以任何建议都会非常感激.

g00*_*0fy 92

在您的单元测试中,您需要手动调用$scope.$digest()$scope.$apply()触发$scope.$watch().

通常在你的代码中你不必这样做,因为指令就像在幕后为你ng-click做的那样$rootScope.$apply.

  • 需要标记为答案,范围.$ apply()适用于我 (3认同)
  • 是不是必须要两次调用$ apply?即在更改观察值之前和之后再次,否则我的期望是错误的.我找不到一个人有两次叫它的例子. (3认同)
  • 是的,在我的一次测试中,我需要两次调用它. (3认同)