所以我正在测试一个控制器,它引用了一个在DOM中指定为ngModel的属性。但是当我测试我的控制器时,我没有模板。因此,每当在控制器中访问$scope.foo.property时,它都会抛出一个错误。
发布于 2013-08-01 02:50:47
在测试中,您可以在实例化控制器之前定义属性:
it('should mock ng-model', inject(function($rootScope, $controller) {
$rootScope.foo = {
property: 'mock value'
};
$controller('myController', {$scope: $rootScope});
})));发布于 2013-08-01 02:52:23
在Angular应用程序中,控制器和视图(模板)是两个独立的东西。将它们粘合在一起的是scope (或模型)。所以,要测试一个控制器,你只需要一个假的作用域来传递给控制器函数。
下面是一个使用全局控制器(只是为了让事情更容易理解--不要在生产代码中使用全局控制器)和伪测试函数的非常简单的示例:
function MyCtrl($scope) {
$scope.bar = $scope.foo.property + 1;
}
function test() {
var scope = { foo: { property: 1 }};
MyCtrl(scope);
expect(scope.bar).toBe(2);
}这比在模块中定义控制器要复杂一些,但那是另一回事了。
https://stackoverflow.com/questions/17977139
复制相似问题