Frage

Ich möchte meine eigene Funktion bereitstellen, um eine Fabrik zu ersetzen, und ich möchte auch die Möglichkeit haben, sie zu verwenden .and.callThrough() um die ursprüngliche Funktionalität zu nutzen.Das Hauptproblem, auf das ich stoße, besteht darin, dass ich keine Factory in die Mock-Modul-Anweisung einfügen kann.

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 });
    }));

})

Irgendwelche Ideen, wie man das überwinden kann?Dank im Voraus!

War es hilfreich?

Lösung

Du könntest das verwenden $provide.decorator() so was:

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();
   });
});

Hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top