J'ai créé un service J'ai lu https : //groups.google.com/forum/? Fromgroups #! Sujet / Angulaire / F0JFWC4G9HI , mais il ne semble pas fonctionner, par exemple: p> env code> qui envoie des informations sur l'environnement et j'utilise actuellement
$ emplacement.host () code> pour déterminer quel environnement je vais. Comment puis-je me moquer de cela dans mes tests?
$ code> variante, mais cela ne fonctionne pas non plus. Des idées? P> p>
4 Réponses :
J'ai eu un problème similaire et j'ai utilisé $ service d'injecteur. (Je ne sais pas si c'est la solution la plus simple, mais cela a fonctionné pour moi :))
Depuis $ Emplacement ne peut pas être invoqué pendant les tests que j'ai préparé ma propre simule.
Tout d'abord, vous devez créer une méthode d'usine. (Ou service ou fournisseur si vous préférez - voir https://gist.github.com/mithrandir0x/3639232 a> à comparaison): p> puis avant de créer votre "env '" fort>, injecteur d'alimentation avec ce $ Emplacement Mock: P> < PRE> XXX PRE> MAINTENANT à chaque fois votre accès $ Emplacement dans votre code Votre simulte est injecté, de sorte qu'il retourne tout ce que vous en avez besoin.
Plus d'informations sur $ Fourniture est dans Documents angulaires P > J'espère que cela vous aide à l'avenir. p> mise à jour: je vois un endroit où vous auriez peut-être mal tourné (ou lequel au moins serait faux dans ma solution). Il semble que vous initiez que vous initiez le module «env» (que je suppose calcule immédiatement les données) et seulement après cela, vous avez changé $ Emplacement - ce qui pourrait être déjà trop tard. P> P>
Le meilleur moyen est d'utiliser des espions IMHO: http: // TobyHo .COM / 2011/12/15 / JASMINE-SPY-CHEXTHEETHEETH /
// inject $location spyOn($location, "host").and.returnValue("super.domain.com"); var host = $location.host(); alert(host) // is "super.domain.com" expect($location.host).toHaveBeenCalled();
La syntaxe de Jasmine 2.0 et plus a changé, vous devriez utiliser .et.ReturnValue ()
Voici une autre façon de se moquer de $ Emplacement, avec sinon.js et un exemple assertion: p>
Il y a un bon exemple dans le doc: https://docs.angularjs.org/guide/services
Vous voulez vous assurer d'utiliser alors p> $ fournir code> avant d'instancier le service. J'aime utiliser
injecteur code> dans la TESTCASE, pour décider d'abord de l'emplacement, puis instanciez le service. P>
describe('production server:', function() {
beforeEach(function() {
// mockLocation.host.andReturn('prod.example.com'); // jasmine 1.x
mockLocation.host.and.returnValue('prod.example.com');
});
it('returns envrionment as production', inject(function($injector) {
Env = $injector.get('Env');
expect(Env.environment).toEqual('production');
}));
});
J'ai aussi essayé
$ navigateur.url () code> selon thecssninja.com/javaScript/angular-locallocation-lesting , mais cela ne fonctionne pas non plus.
J'ai un problème similaire, j'ai besoin d'injecter $ Emplacement dans mon test depuis que le service l'exige.
github.com/angular/angular.js/issues/493