如何在单元测试中更改$ watch值?

时间:2015-04-14 04:21:28

标签: angularjs unit-testing

我的指令看起来像这样:

angular.module('myApp', [])
.directive('myDirective', function(){
    return {
        link: function(scope, element, attr, controller) {
            scope.$watch('data', function(newValue, oldValue) {
                $timeout(function() {
                    if (newValue !== oldValue) {
                        console.log('data Changed!');
                    }
                });
            },true);

            scope.$watch('myCtrl.search', function(newValue, oldValue) {
                $timeout(function() {
                    if (newValue !== oldValue) {
                        console.log('myCtrl.search Changed!');
                    }
                });
            },true);
        }
    };
});

我可以更改data值并在单元测试中触发$watch

scope.data = "new data";
scope.$digest();

但是如何更改myCtrl.search值呢?我尝试使用scope.myCtrl.search = "new search"并返回错误Cannot set property 'search' of undefined

1 个答案:

答案 0 :(得分:0)

由于myCtrl指令执行,

ng-controller=MyController as myCtrl附加到作用域。由于这是一个单元测试,你需要模拟myCtrl。

在您执行的测试设置中

scope = $rootScope.$new()

还要添加

scope.myCtrl={};

设置虚拟变量(控制器)