2016-10-31 2 views
0

Ich teste eine Winkelrichtlinie mit Angular und Jasmin. Mocking das http-Backend funktioniert gut und alle Tests funktionieren gut lokal. Aber auf dem Build-Server i erhalten:Jasmine Testfehler auf Jenkins Build Server mit Angular-Mocks?

Error: Unexpected request: GET app/auth/views/login.html No more request expected (line 1419) [email protected]_components/angular-mocks/angular-mocks.js:1419:90 [email protected]/vendor.js:222:54 build/vendor.js:219:263 build/vendor.js:254:21 [email protected]/vendor.js:268:347 [email protected]/vendor.js:265:425

Mein Testaufbau:

beforeEach(angular.mock.module("app")); 

beforeEach(() => { 
    inject(function ($injector, _$compile_, _$rootScope_) { 
     // The injector unwraps the underscores (_) from around the parameter names when matching 
     $compile = _$compile_; 
     $rootScope = _$rootScope_; 
     $httpBackend = $injector.get("$httpBackend"); 
    }); 

$httpBackend.whenGET("api/langs/gb.json").respond({ "COMMON.HOME": homeName }); 
$httpBackend.whenGET("api/langs/de.json").respond({}); 

$httpBackend.whenGET("app/home/views/dashboard.html").respond(200, ""); 
$httpBackend.whenGET("app/home/views/login.html").respond(200, ""); 
$httpBackend.whenGET(/^private\/auth\?.*/).respond({}); 

directiveElem = getCompiledElement(); 
    }); 

Was auf dem Build-Server unterscheidet. Ich kann dieses Verhalten nicht erklären.

+0

können Sie die $ httpBackend Code zeigen, dass Sie mit der 'app/auth/views/login.html' Datei zu verspotten? – TwitchBronBron

+0

Können Sie auch den Code für Ihre Richtlinie anzeigen? – TwitchBronBron

+0

Wo wird 'http: //localhost/app/auth/views/login.html' in einem Ihrer bereitgestellten Beispiele verwiesen. Wie nehmen Sie "login.html" in Ihre App auf? Können Sie den Code teilen, der diese Datei enthält? – TwitchBronBron

Antwort

1

Der UI-Router versucht, die Datei app/auth/views/login.html während des Starts Ihrer App zu laden.

Wenn Sie die Jasmine-Tests lokal ausführen, haben Sie bereits einen Webserver-Setup auf einer URL wie http://localhost, so dass die Anforderung für http://localhost/app/auth/views/login.html die tatsächliche Datei zurückgibt. Wenn Sie diesen Test auf dem Build-Server ausführen, wird der Build-Server nicht die http://localhost/app/auth/views/login.html URL dienen konfiguriert, so gibt es ein 404.

Dies ist ein Artikel, der beschreibt, wie man um dieses Problem zu umgehen: UI-router interfers with $httpbackend unit test, angular js

Auch hier ist ein github Thema, das mehr ins Detail geht, wie damit umgehen: https://github.com/angular-ui/ui-router/issues/212