AngularJS观察者:在单元测试中oldValue等于newValue
AngularJS watchers: oldValue equal to newValue in unit test
我在单元测试中遇到了AngularJS观察者的问题。
当运行应用程序时,它按预期工作,但在单元测试中,oldValue总是等于newValue,这导致在观察者中测试这些值之间的不平等时测试失败(我认为这是常见的)。
我做了一个小plunkr来说明:http://plnkr.co/edit/a5er4f?p=preview查看控制台以观察其行为。在index.html正常模式下,一切正常,oldValue和newValue总是不同的。在《茉莉花报》里,他们永远是平等的。
对此有什么想法吗?也许我在考试中做错了什么?
谢谢你的帮助!
您需要在测试中手动调用$scope.$apply()
以使监视程序触发,否则它们不会检查值的变化,而是保持不变。
有两件事正在发生:
第一:你正在实例化你的控制器在你的测试appSpec.js使用$controller,这是正确的。但是,您还使用<body ng-controller="WatchCtrl">
实例化了一个带有jasmine-reporter.html的控制器,这两个观察者可能会搞砸您的测试。删除它,同时从html标签中删除ng-app="testApp"。你要用angular.mock.module来初始化你的应用。
Second: $watch在newVal == oldVal == null
初始化时触发。请参阅$watch的文档:http://docs.angularjs.org/api/ng.$rootScope.Scope。所以你应该期待一个$watch循环,其中newVal = oldVal每个控制器实例化。
还请注意,当您在测试中更改value时,您看不到输出,因为在作为测试运行时,$log
已经模拟出来了。您可以切换到使用console.log
来查看来自测试的消息。
Plnkr与修改:http://plnkr.co/edit/voPQax?p=preview
- 测试索引值是否等于某个数字的倍数
- 如何检查数组中的对象是否等于选项值
- ajax在输入等于null时进行检查
- 如何将Date字段设置为等于另一个Date+Int值,该值表示月份值
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- dractor.js应为[]等于[“..”,“..”]
- CORS:访问控制允许原点不等于提供的原点
- 为什么i^=j^=i^=j不是't等于*i^=*j^=*i^=*j
- 获取键的值等于数组值的对象
- 检查本地存储值是否等于
- Why({}+{}).长度等于30
- 在if语句中,undefined等于false
- 选择宽度等于最大选项
- JQuery:如果attr(左)等于0px,如何写入
- javascript中的脚本等于php中的$_SERVER['REQUEST_URI']
- Javascript使变量等于自身加上自身
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- Javascript平等三重等于,但是大于和小于呢?
- 只有一个值等于并在多选中选择
- AngularJS观察者:在单元测试中oldValue等于newValue