Инъекция макета в сервис AngularJS

У меня написан сервис AngularJS, и я хотел бы протестировать его.

angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) {

    this.something = function() {
        // Do something with the injected services
    };

    return this;
});

Мой файл app.js имеет следующие зарегистрированные:

angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)

Я могу проверить, работает ли DI как таковой:

describe("Using the DI framework", function() {
    beforeEach(module('fooServiceProvider'));
    beforeEach(module('barServiceProvider'));
    beforeEach(module('myServiceProvder'));

    var service;

    beforeEach(inject(function(fooService, barService, myService) {
        service=myService;
    }));

    it("can be instantiated", function() {
        expect(service).not.toBeNull();
    });
});

Это доказало, что сервис может быть создан структурой DI, однако затем я хочу провести модульное тестирование сервиса, что означает макетирование внедренных объектов.

Как мне это сделать?

Я пытался поместить мои фиктивные объекты в модуль, например

beforeEach(module(mockNavigationService));

и переписать определение сервиса как:

function MyService(http, fooService, barService) {
    this.somthing = function() {
        // Do something with the injected services
    };
});

angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) { return new MyService($http, fooService, barService); })

Но последний, кажется, останавливает службу, создаваемую DI как все.

Кто-нибудь знает, как я могу смоделировать внедренные сервисы для моих модульных тестов?

Спасибо

Дэвид

Ответы на вопрос(7)

Ваш ответ на вопрос