Angularjs Jasmine Spy обеспечил завод и выступление
-
21-12-2019 - |
Вопрос
Я хочу предоставить свою собственную функцию для замены завода, и я также хочу использовать возможность использовать .and.callThrough()
для использования оригинальной функциональности.Основная проблема, в которой я работаю в том, что я не могу ввести завод в оператор MOCK MODULE.
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 });
}));
})
.
Любые идеи о том, как это преодолеть?Заранее спасибо!
Решение
Вы можете использовать такое значение $provide.decorator()
:
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();
});
});
.
Надеюсь, это поможет.
Не связан с StackOverflow