我正在使用ng-describe
(我必须说,很棒)为 angularJS 编写业力单元测试。
我有两个指令。我想测试testing
需要somethingController
.
code:
angular.module('A', [])
.directive('testing', function($compile){
return {
restrict: 'E',
template: '<div>THIS TEST</div>',
replace:true,
controllerAs: 'testA',
bindToController: true,
require: '^something',
link: function(){
console.log('this is controller');
}
};
})
.directive('something', function(){
return {
restrict: 'E',
template: '<div id="div1">THIS IS PARENT</div>',
replace:true,
controllerAs: 'sth',
bindToController: true,
controller: function($scope,$compile){
console.log('this is something');
angular.element(document.getElementById('div1'))
.prepend($compile('<div>THIS IS compile</div>')($scope));
}
};
});
如果我使用手动编译,我能够成功运行这些测试。
ngDescribe({
name:'a',
modules: 'A',
inject:['$compile'],
exposeApi:true,
only:true,
tests: function(deps, describeApi){
it('asdfasdf', function(){
var mockModalCtrl = {};
deps.element = angular.element('<testing></testing>');
deps.element.data('$somethingController', mockModalCtrl);
inject(function($compile, $rootScope){
$compile(deps.element)($rootScope.$new());
});
deps.step();
});
}
});
如果我不进行手动编译,最终会出现以下错误:
Error: [$compile:ctreq] Controller 'something', required by directive 'testing', can't be found
我真正想做的是:
我正在尝试最大限度地使用 ng-describe 并摆脱手动编译。我试过使用describeApi.setupControllers
https://github.com/kensho/ng-describe#secondary-options但我没有运气。
- 使用 a
describeApi.setupElement('<testing></testing>')
会给我留下上面显示的 $compile 错误。 - 使用
describeApi.setupControllers('something')
给我留下了错误:Error: [ng:areq] Argument 'something' is not a function, got undefined
- 我试图设置名为
something
,somethingController
,的控制器$something
,$somethingController
但我也在undefined, not a function
那里看到了错误。
有没有办法让这个工作?目前我无法在网上找到解决方案...