6

Tôi đang cố gắng kiểm tra đơn vị một chỉ thị sử dụng ngModel và gặp khó khăn. Dường như các chức năng liên kết của chỉ thị của tôi là không bao giờ được gọi là ...Chỉ thị thử nghiệm đơn vị góc sử dụng ngModel

Đây là mã chỉ thị của tôi:

coreModule.directive('coreUnit', ['$timeout', function ($timeout) { 
    return { 
     restrict: 'E', 
     require: '?ngModel', 
     template: "{{output}}", 
     link: function (scope, elem, attrs, ngModelCtrl) { 
      ngModelCtrl.$render = function() { 
       render(ngModelCtrl.$modelValue); 
      }; 
      console.log("called"); 
      function render(unit) { 
       if (unit) { 
        var output = '(' + 
         unit.numerator + 
         (unit.denominator == '' ? '' : '/') + 
         unit.denominator + 
         (unit.rate == 'NONE' || unit.rate == '' ? '' : '/' + unit.rate) + 
         ')'; 
        scope.output = output == '()' ? '' : output; 
       } 
      } 
     } 
    } 
}]); 

Đây là tôi đặc tả kiểm tra:

describe('core', function() { 
    describe('coreUnitDirective', function() { 
     beforeEach(module('core')); 

     var scope, 
      elem; 

     var tpl = '<core-unit ng-model="myUnit"></core-unit>'; 

     beforeEach(inject(function ($rootScope, $compile) { 
      scope = $rootScope.$new(); 
      scope.myUnit = {}; 
      elem = $compile(tpl)(scope); 
      scope.$digest(); 
     })); 

     it('the unit should be empty', function() { 
      expect(elem.html()).toBe(''); 
     }); 

     it('should show (boe)', function() { 
      scope.myUnit = { 
       numerator: 'boe', 
       denominator: "", 
       rate: "" 
      }; 
      scope.$digest(); 
      expect(elem.html()).toContain('(boe)'); 
     }); 
    }); 
}); 

Giao diện điều khiển dữ liệu ghi nhận "được gọi là" không bao giờ xảy ra và rõ ràng là elem trong thông số thử nghiệm của tôi không bao giờ được cập nhật.

Tôi đang làm gì sai ??

+0

Tôi đã tìm ra điều này ... Tôi quên thêm chỉ thị của mình vào mảng tệp trong tệp karma.config của mình. :S – mcottingham

Trả lời

3

Chỉ ra rằng tôi không bao gồm chỉ thị trong tệp karma.config của tôi: S. Thêm nó trong giải quyết tất cả các vấn đề của tôi.

2

Bạn có thể thử hai điều.

Đầu tiên, thay vì chỉ sử dụng một chuỗi tpl, hãy thử angular.element().

var tpl = angular.element('<core-unit ng-model="myUnit"></core-unit>'); 

Thứ hai, đặt tpl vào khối beforeEach. Vì vậy, kết quả sẽ như sau:

beforeEach(inject(function ($rootScope, $compile) { 
    var tpl = angular.element('<core-unit ng-model="myUnit"></core-unit>'); 
    scope = $rootScope.$new(); 
    scope.myUnit = {}; 
    elem = $compile(tpl)(scope); 
    scope.$digest(); 
})); 
Các vấn đề liên quan