Wenn dies ein Komponententest ist, haben Sie keinen Zugriff darauf $httpBackend.passthrough()
. Dies ist nur in ngMock2E2 für End-to-End-Tests verfügbar. Ich bin mit den Antworten einverstanden ng-html2js
(früher html2js genannt), möchte sie aber erweitern, um hier eine vollständige Lösung bereitzustellen.
Zum Rendern Ihrer Direktive ruft Angular $http.get()
Ihre Vorlage ab templateUrl
. Da dies ein Unit-Test ist und angular-mocks
geladen wird, wird angular-mocks
der Aufruf von abgefangen $http.get()
und Sie erhalten den Unexpected request: GET
Fehler. Sie können versuchen, Wege zu finden, um dies zu umgehen, aber es ist viel einfacher, nur Winkel zu verwenden $templateCache
, um Ihre Vorlagen vorzuladen. Auf diese Weise $http.get()
wird nicht einmal ein Problem sein.
Das ist es, was der Präprozessor ng-html2js für Sie tut. Um es zum Laufen zu bringen, installieren Sie es zuerst:
$ npm install karma-ng-html2js-preprocessor
Konfigurieren Sie es dann, indem Sie die folgenden Felder in Ihrem hinzufügen / aktualisieren karma.conf.js
{
files: [
'templates/**/*.html'
],
preprocessors: {
"templates/**/*.html": "ng-html2js"
},
ngHtml2JsPreprocessor: {
moduleName: 'test-templates',
}
}
Verwenden test-templates
Sie schließlich in Ihrem Testcode das Modul, das Sie gerade erstellt haben. Fügen Sie test-templates
dem Modulaufruf, den Sie normalerweise ausführen beforeEach
, einfach Folgendes hinzu :
beforeEach(module('myapp', 'test-templates'))
Von hier an sollte es glatt sein. Weitere Informationen zu diesem und anderen Testszenarien für Richtlinien finden Sie in diesem Beitrag