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!

Était-ce utile?

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
scroll top