所以我正在测试一个控制器,它引用了DOM中指定为ngModel的属性。 但是当我测试我的控制器时,我没有模板。 因此,只要在控制器中访问$ scope.foo.property,就会抛出错误。
答案 0 :(得分:1)
在测试中,您可以在实例化控制器之前定义属性:
it('should mock ng-model', inject(function($rootScope, $controller) {
$rootScope.foo = {
property: 'mock value'
};
$controller('myController', {$scope: $rootScope});
})));
答案 1 :(得分: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);
}
比在模块中定义控制器时要复杂一点,但这是另一个故事。