Проверьте, был ли вызван закрытый метод в Сервисе - PullRequest
0 голосов
/ 14 мая 2018

Как мне проверить, был ли вызван приватный метод AngularJS в $ service? Буду признателен за любую помощь.

angular.module('login')
.service('EventService', [ '$http', '$log', function ($http, $log) {

    function sendEvent(category, action, label, value, customParams) {
        //
    }

    return {
        sendLoginPageEvent: function (action, customParams) {
            if (!customParams) {
                customParams = {};
            }
            customParams.template = 'templateName';

            sendEvent('LoginPage', action, null, null, customParams);
        },

    };

}]);

У меня есть несколько подобных тестов, но, похоже, они не работают:

describe('Test of Cookie Monster service', function() {

    var EventService;
    var sendEventSpy = jasmine.createSpy('eventSpy');


    beforeEach(module(function($provide) {
        $provide.value("event", sendEventSpy);
    }));

    beforeEach(inject(function (_EventService_) {
        EventService = _EventService_;
    }));


    it('send cookie event', function() {
        EventService.sendLoginPageEvent('action')

        expect(event.sendEvent)
        .toHaveBeenCalledWith('LoginPage', 'action', {template: 'templateName'})
    });
});

Это даже правильный подход к тестированию сервиса таким образом? Я только начинаю тестировать внешние интерфейсы, поэтому буду благодарен за любые советы.

1 Ответ

0 голосов
/ 14 мая 2018

Это не приватный метод, это локальная функция.Переменные недоступны за пределами области, в которой они были определены, это может использоваться для реализации шаблона модуля в JS.

Для того, чтобы быть тестируемым, его следует определить как метод обслуживания:

this.sendEvent = ...

Тогда это можно было бы отследить как любой другой метод:

spyOn(EventService, 'sendEvent').and.callThrough()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...