我创建了一个自定义指令,它有一个监视几个独立的范围属性,这里是相关的代码:
scope.$watchGroup(['repairer', 'initial'], function () {
scope.Repairer = null;
...
scriptingService.getScript(request).then(function (scripts) {
scope.scripts = scripts;
});
我写了几个测试,但没有一个可以工作,这是其中之一:
it('should Repairer be 2', function() {
scope.$apply(function() {
scope.initial = 2;
});
expect(element.isolateScope().Repairer).toEqual(2);
});
但是我收到了一个错误:
TypeError: Cannot read property 'Repairer' of undefined
如何让测试工作?看起来该指令在某种程度上没有在测试中运行。
这是一个plunkerref:http://plnkr.co/edit/0R6KXp86BXFzhPRhT98S?p=preview
答案 0 :(得分:0)
问题: 1.你试图将你的范围编译成一个没有html的elemet,因为你的模板是''。 (你用$ httpBackend嘲笑它。)
// templateUrl: 'components/directives/scripting/scripting.html',
您需要为每项测试模拟您的服务:
spyOn(scriptingService, "getScript").andReturn(qq.when({}))
您遇到语法错误(声明为$ scope,但使用了范围):
link:function(scope,element,attrs){
var visibleScript = 0;
scope.isHidden = false;
scope.$watchGroup(['repairer', 'initial'], function () {
...
检查出来: