具有隔离范围的单元测试指令

时间:2014-07-06 03:54:13

标签: angularjs

我想对一个看起来像这样的指令进行单元测试:

'use strict';

angular.module('app')
  .directive('phone', function () {
    return {
      require: 'ngModel',
      scope: {
        user:'=',
      },
      link: function(scope, element, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
          scope.user.division = null;
          return viewValue;
        });
      }
    };
  });

这是我的失败测试

'use strict';

describe('Directive: phone', function () {

  // load the directive's module
  beforeEach(module('app'));          
  var element,
    scope;

  beforeEach(inject(function ($compile, $rootScope) {
    scope = $rootScope.$new();
    element = angular.element('<form name="form"><input name="phone" ng-model="user.phone" phone></form>');
    scope.user = {};
    element = $compile(element)(scope);
    element.scope().$digest();
  }));

  it('should work', function() {
    scope.form.phone.$setViewValue('1');
  });
});

但是当我尝试运行它时,我得到了:

TypeError: 'undefined' is not an object (evaluating 'scope.user.division=null')

1 个答案:

答案 0 :(得分:1)

您的隔离范围意味着元素上应该有一个user属性,该属性引用父$ scope上的user实体。

在编译的HTML中,没有user属性,因此您的isolate $ scope的user属性未定义。

您的HTML应如下所示:

<input ... user="user" />