所以我正在测试一个控制器,它引用了一个在 DOM 中指定为 ngModel 的属性。但是当我测试我的控制器时,我没有模板。因此,每当在控制器中访问 $scope.foo.property 时,它都会引发错误。
问问题
1887 次
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 回答