Внедрить сервис AngularJs, используемый при закрытии прогона для тестирования

Я пытаюсь протестировать службу angularjs под названием MyService. Если я пытаюсь внедрить его, кажется, что angular пытается использовать его до загрузки. С другой стороны, если я буду издеваться над MyService через $provide и так далее, это работает, но у меня не будет реального объекта для тестирования.

(function (angular) {
    'use strict';

    angular.module('app', []).run(["MyService",
            function (MyService) {

                MyService.initListeners();


             }
        ]);

    // this is supposed to be in another file
    angular.module('app')
        .service("MyService", function() {

                return {
                     initListeners: function() {
                       console.log("working")
                     }
                }
        })

}(angular));

Тест такой:

(function () {
    'use strict';

    describe("MyService", function () {

        var MyService = null;

        beforeEach(module("app"));

        beforeEach(inject(function ($injector) {
            MyService = $injector.get('MyService');
        }));

        afterEach(function () {
            MyService = null;
        });

        it("injection works", function () {
            expect(true).toBeTruthy(); // throws exception
        });

    });
}());

1 ответ

Решение

Я сделал тест на jsfiddle.

Я вижу порядок выполнения с некоторыми сообщениями консоли. Порядок выполнения является правильным, как и ожидалось.

My service constructor
before init
MyService.initListeners()
after init

И два теста работают правильно:

    it("injection works", function () {
        expect(true).toBeTruthy(); // throws exception
        expect(MyService).toBeDefined();
    });

Вот код: http://jsfiddle.net/jordiburgos/1efvof3k/

Это может быть ваша версия AngularJS, Jasmine и т.д...

Другие вопросы по тегам