문제

공장을 대체하기 위해 내 자신의 함수를 제공하고 싶습니다. 그리고 또한 .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();
   });
});
.

희망이 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top