Fast in jedem Projekt nutzen wir Direktiven, die mit Templates arbeiten. Diese verweisen mit dem Parameter templateUrl auf eine Datei, die während der Laufzeit der Anwendung per HTTP-Request nachgeladen wird.
💡 Keine Lust zu lesen?
Nicht jeder lernt am besten aus Büchern und Artikeln. Lernen darf interaktiv sein und Spaß machen. Wir bieten dir auch Angular Intensiv-Schulungen an, um dich möglichst effektiv in das Thema Angular zu begleiten. Im Kurs kannst du die Fragen stellen, die du nur schlecht googeln kannst, z.B. "Besserer Weg, um meine Applikation zu strukturieren?". Wir können sie dir beantworten.
- ✔ Öffentliche Termine verfügbar
- ✔ Vor Ort, als auch Remote
- ✔ Deutsch/Englisch möglich

angular.module("angularjsDE").directive("templateUrlDirective", function () {
return {
restrict: "E",
templateUrl: "views/TemplateUrlDirective.html",
};
});
Möchte man diese Direktive testen, stopelt man relativ schnell über folgenden Fehler:
Error: Unexpected request: GET views/TemplateUrlDirective.html
Zum Testen benutzen wir angular-mock. Dieses Modul bietet uns $httpBackend als Mock-Implementierung zum Testen von $http. Da templateUrl aber intern auch wieder $http nutzt, werden auch diese Aufrufe gemockt.
Zur Lösung könnten wir in diesem Fall unsere Template-Anfragen mocken und das $httpBackend Mock als Response unser Template zurückgeben lassen. Das ist natürlich weder schön, noch wartbar.
Alternativ können wir den Karma-Preprocessor nghtml2js nutzen. Mit diesem werden unsere HTML-Templates automatisch in den Template-Cache geschrieben und in unsere TestSuite geladen. Somit sparen wir uns den HTTP-Request komplett. Weiterhin müssen wir die Templates nur einmal schreiben und auch nicht an verschiedenen Stellen pflegen.
npm install
npm install karma-ng-html2js-preprocessor --save-dev
karma.conf.js
files: [
[...]
// Match all templates for nghtml2js
'src/**/*.html'
],
preprocessors: {
'src/**/*.html': 'ng-html2js'
},
ngHtml2JsPreprocessor: {
stripPrefix: 'src/',
[[cta:training-bottom]]
moduleName: 'templates'
}
test/_common/templates.js
beforeEach(module("templates")); Robin Böhm
Gründer von Angular.DE
Entwickler, Trainer und Buch-Autor
Robin beschäftigt sich seit 2012 intensiv mit der Erstellung client-seitiger Web-Applikationen. 2014 hat er das erste deutschsprachige Buch zum Thema AngularJS geschrieben und ist Mitgründer der Platform Angular.DE. Mit seinem Schulungs-Team hat er bereits über 1200 Unternehmen den erfolgreichen Sta… Mehr zu Robin Böhm
Werde Teil unserer Community
Seit 2013 bieten wir Tutorials, Artikel und Schulungen rund um Angular. Mit 18 Meetups und über 10.000 Entwickler:innen sind wir die größte Angular-Community in Europa.
Jetzt beitretenWeitere Artikel
Was sind Angular und AngularJS?
Was sind die Unterschiede zwischen Angular und AngularJS?
Migration AngularJS zu Angular
Migration mit ngUpgrade leichtgemacht. Eine Zusammenfassung über alle wichtigen Schritte, wie ihr eure AngularJS App zu einer Angular App migrieren könnt.
Migration AngularJS zu Angular [Video]
Angular Version >2.x kommt … und es macht alles anders! Ist das wirklich so? Was hat das für meine Anwendung zu bedeuten? Mehr darüber in diesem Artikel!