当我在角度测试中实例化控制器时,我想将此函数注入ng-init指令,在html中我会将其设置为:
<div ng-controller="my-ctrl" ng-init="initialize({updateUrl: 'list_json'})
在我的测试中,我可以编写一个这样的函数,它会在范围内粘贴正确的东西,但我觉得它很混乱。另外,我担心html中的功能目前在我的中途测试中搞乱了。
function initController($scope){
$scope['updateUrl'] = 'list_json'
}
答案 0 :(得分: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会出错,那么你就不应该在单元测试中覆盖这样的错误。你不能强迫人们不犯错误: - )