1

所以我正在测试一个控制器,它引用了一个在 DOM 中指定为 ngModel 的属性。但是当我测试我的控制器时,我没有模板。因此,每当在控制器中访问 $scope.foo.property 时,它都会引发错误。

4

2 回答 2

1

在您的测试中,您可以在实例化控制器之前定义您的属性:

it('should mock ng-model', inject(function($rootScope, $controller) {

    $rootScope.foo = {
        property: 'mock value'
    };

    $controller('myController', {$scope: $rootScope});
})));
于 2013-07-31T18:50:46.960 回答
0

控制器和视图(模板)在 Angular 应用程序中是两个独立的东西。将它们粘合在一起的是范围(或模型)。所以,要测试一个控制器,你只需要一个假的范围来传递给控制器​​功能。

这是一个非常简单的例子,它使用了一个全局控制器(只是为了让事情更容易理解——不要在生产代码中使用全局控制器)和一个伪测试函数:

function MyCtrl($scope) {
    $scope.bar = $scope.foo.property + 1;
}

function test() {
    var scope = { foo: { property: 1 }};
    MyCtrl(scope);
    expect(scope.bar).toBe(2);  
}

它比在模块中定义控制器时要复杂一些,但这是另一回事。

于 2013-07-31T18:52:23.487 回答