2

当我在角度测试中实例化控制器时,我想将此函数注入到 ng-init 指令中,在 html 中我会这样设置它:

 <div ng-controller="my-ctrl" ng-init="initialize({updateUrl: 'list_json'})

在我的测试中,我可以编写一个这样的函数,它将正确的东西粘贴在范围内,但我认为它很混乱。我也担心当前在 html 中硬连线的功能在我的中途测试中搞砸了

function initController($scope){

  $scope['updateUrl'] = 'list_json'

}
4

1 回答 1

4

我不认为它ng-init本身会创建任何功能,所以我认为这只是一种错误的使用方式(从你的片段来看)。

我通常做的是自己创建 init 函数,然后在控制器的单元测试中毫无问题地对其进行测试。

<div ng-controller="my-ctrl" ng-init="init({ updateUrl : 'list_json' })">...</div>

function MyController($scope){

  $scope.init = function(config) {
     $scope.updateUrl = config.updateUrl;
  }

}

然后在 Jasmine 中,您可以毫无问题地编写一个调用该init()函数的测试(跳过样板文件):

// Given
var config = { updateUrl : 'list_json' };
// When
myController.init(config);
// Then
// ...

关于单元测试的重要评论

如果你认为你应该测试你的 HTML 标记是否init()使用给定的参数调用,那么我认为你错了。根本没有什么可以测试的。那里根本没有逻辑!你的测试应该验证组件的工作方式,如果程序员在将错误的参数从 HTML 传递到 Angular 时犯了错误,那么你不应该为在单元测试中覆盖这些错误而烦恼。你不能强迫人们不要犯错误:-)

于 2014-01-10T12:09:55.060 回答