Pregunta

Quiero dar mi propia función para reemplazar una fábrica, y también quiero que la capacidad para utilizar .and.callThrough() para utilizar la funcionalidad original.El problema principal que yo voy es que no me puedo inyectar una fábrica en la imitación de un módulo de instrucción.

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

})

Cualquier idea sobre cómo superar esto?Gracias de antemano!

¿Fue útil?

Solución

Usted podría utilizar la $provide.decorator() como este:

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

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top