控制器中有手表时出现角度UT问题
Issue with angular UT when having a watch in the controller
我有一个类似的控制器
(function () {
angular.module("WatchApp", [])
.controller("WatchController", function ($scope) {
$scope.options = {
rowSelection: true
, multiSelect: false
, autoSelect: false
, decapitate: false
, largeEditDialog: false
, boundaryLinks: false
, limitSelect: true
, pageSelect: true
};
$scope.$watch($scope.options.rowSelection, function (newValue, oldValue) {
if (!oldValue) {
console.log("! old Value ");
}
if (newValue !== oldValue) {
console.log("newValue != old Value ");
}
if (!newValue) {
console.log("! newValue");
}
});
});
}());
我也有这个控制器的UT,就像下面的一样
describe("WatchController", function () {
var $scope;
beforeEach(function () {
module("WatchApp");
return null;
});
beforeEach(
inject(function (_$controller_) {
$scope = {};
controller: _$controller_("WatchController", {
$scope: $scope
});
}));
describe("Initialization", function () {
it("newPlace.city and country should be empty", function () {
expect($scope.options.rowSelection).toEqual(true);
})
});
});
如果我删除$scope,这个UT将正常工作$手表块,否则我会得到以下异常。
PhantomJS 2.1.1 (Windows 7 0.0.0) WatchController Initialization newPlace.city and country should be empty F
TypeError: undefined is not a constructor (evaluating '$scope.$watch') (line 15)
C:/Robin/Studies/Angularjs/ut/app/controllers/watchController.js:15:26
[native code]
instantiate@C:/Robin/Studies/Angularjs/ut/bower_components/angular/angular.js:4680:61
$controller@C:/Robin/Studies/Angularjs/ut/bower_components/angular/angular.js:10130:39
C:/Robin/Studies/Angularjs/ut/bower_components/angular-mocks/angular-mocks.js:2194:21
C:/Robin/Studies/Angularjs/ut/test/controllers/watchControllerSpec.js:10:38
invoke@C:/Robin/Studies/Angularjs/ut/bower_components/angular/angular.js:4665:24
workFn@C:/Robin/Studies/Angularjs/ut/bower_components/angular-mocks/angular-mocks.js:2965:26
inject@C:/Robin/Studies/Angularjs/ut/bower_components/angular-mocks/angular-mocks.js:2931:28
C:/Robin/Studies/Angularjs/ut/test/controllers/watchControllerSpec.js:8:15
global code@C:/Robin/Studies/Angularjs/ut/test/controllers/watchControllerSpec.js:1:9
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 14 of 14 (1 FAILED) (0.016 secs / 0.39 secs)
将监视行代码更新为:
$scope.$watch('options.rowSelection', function (newValue, oldValue) {
更多详细信息请查看此链接上的观察示例
通过修改像这样的注入方法来修复问题
inject(function (_$controller_, $rootScope) {
$scope = $rootScope.$new();
controller: _$controller_("WatchController", {
$scope: $scope
});
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何消除代码中的未定义和其他问题
- JavaScript代码问题:我正在将对象转换为数组
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 由于iframe导致的问题
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- 控制器中有手表时出现角度UT问题