繁体   English   中英

单元测试角度属性指令

[英]Unit Testing Angular Attribute Directive

我在测试AngularJS(1.5)属性受限指令时遇到一些问题。 请参见下面的示例指令和后续的单元测试,其中的单元测试会产生损坏的单元测试。

指示

(function (angular) {
  'use strict';

  function SomethingCtrl($filter) {
    return {
      restrict: 'A',
      require: 'ngModel',
      link: function(scope, element, attrs, ngModelController) {
        var exampleFilter = $filter('exampleFilter');
        ngModelController.$parsers.push(function(value) {
          ngModelController.$setViewValue(value);
          ngModelController.$render();
          return value;
        });
      }
    };
  }

  SomethingCtrl.$inject = ['$filter'];

  angular.module('something.formatter', [
    'filters'
  ]).directive('somethingFormatter', SomethingCtrl);
}(window.angular));

指令单元测试

fdescribe('something.formatter spec', function () {
  'use strict';
  var scope,
      element,
      testValue,
      compile,
      ngModelCtrl;

  beforeEach(function () {
    module('something.formatter');

    compile = function () {
      inject([
        '$compile',
        '$rootScope',
        function ($compile, $rootScope) {
          scope = $rootScope.$new();
          scope.testValue = testValue;
          element = angular.element('<input something-formatter ng-model="testValue"');
          $compile(element)(scope);
          ngModelCtrl = element.controller('ngModel');
          scope.$digest();
        }
      ]);
    };
  });
  describe('initialization', function () {
    beforeEach(function () {
      testValue = 'Yay!';
      compile();
      ngModelCtrl.$setViewValue('Nay?');
    });
    it('should be defined', function () {
      expect(scope.testValue).toEqual('Nay?');
    });
  });
});

我尝试按照以下说明进行操作: http : //jsfiddle.net/mazan_robert/hdsjbm9n/

为了能够调用ngModelController上的方法,例如; $ setViewValue。

然而,Jasmine继续对我大喊大叫,并告诉我$ setViewValue不是构造函数,甚至没有在实际指令中命中console.logs。

TypeError: undefined is not an object (evaluating 'ngModelCtrl.$setViewValue')

思考?

非常感谢你的帮助!

如果关闭输入标签,它将起作用:

element = angular.element('<input something-formatter ng-model="testValue" />');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM