2016-04-01 4 views
21

Ich könnte Hilfe verwenden, um eine Lösung für mein Problem zu finden. Ich brauche ein paar Daten zu meinem angular2 Anwendung spotten, wenn es eine Anforderung an eine api macht, brauche ich etwas zu tun:Winkelmesser, verspotten Backend mit angular2 auf API-Anfrage

$httpBackend.when('GET', '/userbookings/').respond(my json file data); 

Das Problem ist alles, was ich auf Google finden, die $ httpBackend mit denen ist verwendet für angularJS (Winkel 1).

Weiß jemand, wie ich das in meinem E2E-Test (die Anwendung ist eine angular2-Anwendung) zum Funktionieren bringen kann? Ich versuche, diese beiden zu tun mit Transporteur oder Nachtwache (Haben beide Frameworks versucht)

Spec-Test:

describe('Protractor Mocking bookings for angular2 site', function() { 

var ngMockE2E = require('ng-mock-e2e'); 

var $httpBackend = ngMockE2E.$httpBackend; 

beforeEach(function() { 
    ngMockE2E.addMockModule(); 
    ngMockE2E.addAsDependencyForModule('myApp'); 
    ngMockE2E.embedScript('/bower_components/angular-mocks/angular-mocks.js'); 
}); 


afterEach(function() { 
    ngMockE2E.clearMockModules(); 
}); 

it('Inject mock data of bookings', function() { 

    var EC = protractor.ExpectedConditions; 
    var global = require('../bin/globals.js'); 

    // Bookings data in a json file which should be send as the response 
    var mockData = require('../testData.json'); 

    browser.ignoreSynchronization = false; 

    $httpBackend.when('GET', '/userbookings').respond(mockData); 

    browser.get(global.so.enLoggedIn); 

}); 

}); 

Dieser Test wird nicht funktionieren, weil es einige angular1 Weg, verwenden. Habe es gezeigt, damit Sie sehen können, wie mein Test aussieht.

Hoffe jemand kann mir hier helfen, weil es sehr schwer ist, etwas mit angular2 zu arbeiten.

+0

Ich würde dieses Paket https://github.com/atecarlos/protractor-http-mock empfehlen. – finspin

+0

Hast du es mit Winkel 2 probiert? Habe es schon ausprobiert und angeschaut .. Die Beschreibung wie es funktioniert ist schwer zu verstehen. Vielleicht ist es nur ich. – Mandersen

+0

Sind Sie auf der Suche nach etwas, das hier beschrieben wird? Es ist nicht wirklich in einer Testumgebung, aber es wäre kein Problem, es zu portieren. http://www.sitepoint.com/angular-2-mockbackend/ – zewa666

Antwort

18

Protractor does not yet support adding mock modules for Angular 2 applications:

// TODO: support mock modules in Angular2. For now, error if someone 
// has tried to use one. 
if (self.mockModules_.length > 1) { 
    deferred.reject('Trying to load mock modules on an Angular2 app ' + 
     'is not yet supported.'); 
} 

Und habe ich schuf auch eine Github Problem für die TODO aufmerksam zu machen:

Dies, durch die Übrigens, bedeutet auch, dass protractor-http-mock nicht funktionieren wird, da es darauf angewiesen ist addMockModuleinternally. Ich habe persönlich protractor-http-mock auf einer Probe Angular2 Anwendung versucht, bekam:

fehlgeschlagen: Der Versuch, Mock-Module auf einer Angular2 App laden wird noch nicht unterstützt.

Gleiches gilt für die Pakete http-backend-proxy und httpbackend.


Ich denke, während das Problem noch nicht festgelegt ist, sollten Sie Anheizen betrachten ein Proxy, die als eine Art „externe mock“, um Ihre API-Backend handeln würde, haben sie nicht persönlich getan sehen, mehr unter:

+0

Große Antwort, wissen Sie, ob es implementiert wurde? Ich bin immer auf der Suche nach wie Backend mit e2e testen: -/ – mfrachet

+0

@Skahrz danke, es sieht leider so aus wird nicht unterstützt – alecxe

+0

Ich kann keine anderen Ressourcen finden, aber diese Frage zu SO Ich stehe vor dem gleichen Problem, und ich frage mich, ob es immer noch keine Unterstützung für Scheinbackends gibt, wie von Angular 2.0.2 und Protractor 4.0. 9? – CharlyDelta

0

Da es keine Unterstützung für mo cked Module in eckigen 2, habe ich ein kleines Winkelmesser-Plugin, das Mock Ajax Anfrage ermöglicht. Sie können es hier finden: https://github.com/krisboit/protractor-xmlhttprequest-mock

Es gibt keine Dokumentation noch, aber Sie können Beispieltests finden. Ich hoffe es hilft dir.

+0

Hey, ich konnte dieses Beispiel nicht ausführen, aber eine schnelle Lösung, die mir geholfen hat, war, browser.executeScript durch 'browser.driver.executeScript' in' index.js' zu ersetzen – Andurit

-1

persönlich ist, habe ich die ng-apimock Plugin all Netzwerk-Anrufe an das Backend mit einem Proxy zu verspotten.

Es funktioniert wirklich gut und ist einfach zu konfigurieren. Befolgen Sie einfach die Konfiguration für Winkelanwendung here