AngularJS观察者:在单元测试中oldValue等于newValue

AngularJS watchers: oldValue equal to newValue in unit test

本文关键字:oldValue 等于 newValue 单元测试 观察者 AngularJS      更新时间:2023-09-26

我在单元测试中遇到了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