L'espion AngularJS Jasmine a fourni une usine et un appel
-
21-12-2019 - |
Question
Je souhaite fournir ma propre fonction pour remplacer une usine, et je veux également pouvoir utiliser .and.callThrough()
pour utiliser la fonctionnalité d'origine.Le principal problème que je rencontre est que je ne peux pas injecter de fabrique dans l'instruction du module fictif.
describe("It", function() {
var mockFactory;
//This works, but the original functionality is gone at this point because I'm overriding it with $provide
beforeEach(angular.mock.module('myModule', function($provide) {
mockFactory = jasmine.createSpy('myFactory');
$provide.factory('myFactory', function() { return mockFactory });
}));
//This fails because I cant inject the actual factory into the module mock
beforeEach(angular.mock.module('myModule', function($provide, myFactory) {
mockFactory = jasmine.createSpy('myFactory', myFactory);
$provide.factory('myFactory', function() { return mockFactory });
}));
})
Des idées sur la façon de surmonter cela ?Merci d'avance!
La solution
Vous pourriez utiliser le $provide.decorator()
comme ça:
describe('It', function() {
var mockFactory;
beforeEach(module('myModule', function ($provide) {
$provide.decorator('myFactory', function ($delegate) {
mockFactory = jasmine.createSpy('myFactory', $delegate).and.callThrough();
return mockFactory;
});
}));
it('should call through', function () {
mockFactory('foo', 'bar');
expect(myFactory).toHaveBeenCalled();
});
});
J'espère que cela t'aides.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow