2

Ich versuche meine Angular Direktive mit Karma + Jasmin zu testen. So wie meine Direktive templateUrl hat, muss ich die Vorlage mit karma-ng-html2js-preprocessor zwischenspeichern. Meine karma.conf.js Datei:Test Winkelanweisung mit templateUrl

... 
files: [ 
    ... 
    'static/views/**/*.html', // to match my directive template 
    ... 
], 

preprocessors: { 
    '/static/views/**/*.html': ['ng-html2js] // to catch the filename as specified in templateUrl 
}, 

ngHtml2JsPreprocessor: { 
    moduleName: 'templates' 
} 
... 

Und meine Jasmin spec:

describe('Directive unittesting', function() { 
    beforeEach(module('myModule')); 
    beforeEach(module('templates')); 

    var $compile, $scope; 

    beforeEach(inject(function(_$compile_, _$rootScope_) { 
    $compile = _$compile_; 
    $scope = _$rootScope_.$new(); 
    })); 

    it('Replaces the element with the appropriate content', function() { 
    var element = $compile("<my-directive></my-directive>")($scope); 
    expect(element.html()).toContain("text to contain"); 
    }); 

}); 

aber scheint, dass es aus irgendwelchen Gründen kann meine templates Modul nicht injizieren: TypeError: undefined is not a function (evaluating '$compile(.... Wie können diese Dinge richtig funktionieren?

Antwort

2

So wurde das Problem mit Veränderung der Konfiguration

ngHtml2JsPreprocessor: { 
    prependPrefix: '/', 
    moduleName: 'templates' 
}, 

gelöst und Prä-Prozessor ist eigentlich ohne den führenden Schrägstrich

preprocessors: { 
    'static/views/**/*.html': ['ng-html2js'] 
}, 

Also, eigentlich in Ihrer Richtlinie sollte der Pfad zu der Vorlage genau sein so /statics/views/directives/my-directive.html. Und die andere Sache: Vergessen Sie nicht, $scope.$digest(); in die Direktive aufzunehmen, die mit dem ganzen Kontext gerendert werden soll.