Angularjs Jasmine Spy는 공장과 콜로그를 제공했습니다
-
21-12-2019 - |
문제
공장을 대체하기 위해 내 자신의 함수를 제공하고 싶습니다. 그리고 또한 .and.callThrough()
를 사용하여 원래 기능을 사용할 수 있습니다.실행중인 주요 문제는 모듈 모듈 문에 공장을 주입 할 수 없다는 것입니다.
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