为什么元素范围在指令单元测试中为空?

时间:2016-02-28 11:40:06

标签: angularjs unit-testing angularjs-directive jasmine

我创建了一个自定义指令,它有一个监视几个独立的范围属性,这里是相关的代码:

 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

1 个答案:

答案 0 :(得分:0)

问题: 1.你试图将你的范围编译成一个没有html的elemet,因为你的模板是''。 (你用$ httpBackend嘲笑它。)

 // templateUrl: 'components/directives/scripting/scripting.html',
  1. 您需要为每项测试模拟您的服务:

    spyOn(scriptingService, "getScript").andReturn(qq.when({}))
    
  2. 您遇到语法错误(声明为$ scope,但使用了范围):

    link:function(scope,element,attrs){

            var visibleScript = 0;
            scope.isHidden = false;
    
            scope.$watchGroup(['repairer', 'initial'], function () {
    

    ...

  3. 检查出来:

    http://plnkr.co/edit/AnqBx4Z6PuRXElwXA1Bm?p=preview