AngularJS Jasmine Spy stellte Factory und Callthrough bereit
-
21-12-2019 - |
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!
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