Le rapporteur, se moquant d'arrière-plan avec le angular2 sur la demande d'api
Je pourrais utiliser un peu d'aide pour trouver une solution à mon problème. J'ai besoin de se moquer de certaines données de mon angular2 application lorsqu'il fait une demande à une api, j'ai besoin de faire quelque chose comme:
$httpBackend.when('GET', '/userbookings/').respond(my json file data);
Le problème est que tout ce que je peux trouver sur google, à l'aide de l' $httpBackend qui est utilisé pour angularJS (angulaire 1).
N'a aucun savoir comment je peux obtenir que cela fonctionne dans mon E2E (test de L'application est de angular2 d'application)? Je suis en train de le faire avec les deux rapporteur ou de nightwatch (Avoir essayé les deux cadres)
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);
});
});
Ce test ne fonctionnent pas parce que c'est à l'aide de certains angular1 façon. Ont montré, de sorte que vous pouvez voir comment mon test ressemble.
Espère que quelqu'un pourra m'aider ici, parce il est vraiment difficile de trouver certains de travailler avec angular2.
- Je recommande ce paquet github.com/atecarlos/protractor-http-mock.
- Avez-vous essayé avec angulaire 2?. Ont déjà essayé et regardé.. La description de la façon dont il fonctionne, c'est dur à comprendre. Peut-être que c'est juste moi.
- Est ce que vous êtes à la recherche de quelque chose décrite ici? Ce n'est pas vraiment à l'intérieur d'un environnement de test, mais aurait pas de problème à port-dessus. sitepoint.com/angular-2-mockbackend
- Je prends un coup d'oeil quand je suis de retour au travail.. semble intéressant - Merci beaucoup!
- Ne pas vraiment m'aider :(, j'ai besoin d'une sorte de lib je peux obtenir via npm.
- bien que la bibliothèque elle-même partie de Angular2 qui est installé via NPM
- ah ok, je vois, vous voulez d'un réel E2E test vs test de l'Unité ... sry mon erreur.
Vous devez vous connecter pour publier un commentaire.
Rapporteur ne prend pas encore en charge l'ajout de se moquer de modules Angulaire 2 applications:
Et, j'ai aussi créé un github problème pour la TODO pour attirer l'attention:
Ce, par la manière, ce qui signifie que
protractor-http-mock
est ne va pas marcher, car il s'appuie suraddMockModule
en interne. J'ai personnellement essayéprotractor-http-mock
sur un échantillon Angular2 application, eu:En est de même pour la
http-backend-proxy
ethttpbackend
paquets.Je suppose que, bien que la question n'est pas encore fixé, vous devriez envisager de tirer jusqu'à une proxy qui agirait comme une sorte de "externes se moquer" de votre API backend, ne l'ont pas fait personnellement, voir plus à:
Fini par utiliser json-serveur comme il n'y a toujours pas de support de
addMockModule
Angulaire 2Comme il n'y a pas de support pour se moquaient de modules angulaire 2, j'ai fait une petite rapporteur plugin qui permet de se moquer de requête ajax. Vous pouvez le trouver ici: https://github.com/krisboit/protractor-xmlhttprequest-mock
Il n'y a pas de documents, mais vous pouvez trouver des exemples de tests. J'espère que cela vous aide.
browser.executeScript
avecbrowser.driver.executeScript
dansindex.js
J'ai trouvé une solution à ce qui est relativement indolore et pour l'instant fonctionne très bien, et ne nécessite pas de changer toutes les références pour les importations.
Il y a plusieurs étapes, en fonction de ce que vous essayez d'accomplir. Je travaillais sur e2e tests, ce qui permettra de décrire ce que la solution.
Première mise à jour de votre angulaire.json avec des configs qui sont spécifiques à votre environnement de test, (juste au-dessus de "servir"), le mien est:
Ensuite, mise à jour de votre e2e config par la mise à jour de la
devServerTarget
avec votre nouvelle config:"devServerTarget": "{APP_NAME}:serve-e2e:test"
Ensuite, j'ai créé un nouvel ensemble de l'environnement des fichiers spécifiques, appelés
mock-service-mapping
, donc dans mon dossier environnement, j'ai maintenant:Dans ces fichiers, je stocker la cartographie de mon réel et le simulacre de services:
Maintenant nous avons besoin pour faire leur environnement spécifique. Mise à jour de votre angulaire.json pour l'installation de la bonne mappages pour vos différents environnements:
Et le dernier morceau de la magie. Dans votre module de déclarations, le programme d'installation de vos fournisseurs, de tirer la classe à partir de votre nouvelle maquette fichiers d'environnement.
{ provide: DataService, useClass: mockServiceMapping.dataServiceClass }
Et le tour est joué, se moquer de services, pas de bibliothèque, pas de gâchis, pas de supplément de code compilé, et assez simple!
Personnellement, j'ai utilisé le ng-apimock plugin pour se moquer de tous les appels réseau à l'arrière-plan avec un proxy.
Il fonctionne vraiment bien et est simple à configurer. Il suffit de suivre la configuration Angulaire de l'application ici