Как следить за методом обслуживания с контроллера? - PullRequest
0 голосов
/ 21 февраля 2019

Я пишу UT для контроллера и при попытке реализовать метод commandRouter.execute (см. 2-ю спецификацию), я получаю сообщение об ошибке: не могу прочитать свойство 'execute' из неопределенного.

Можеткто-то дал мне знать, что я делаю здесь неправильно и как правильно шпионить за методом из контроллера.?

module.controller('DcsPlus.AP.OmsControl.omsMasterRecipeDialogPopUpController', omsMasterRecipeDialogPopUpController);

    omsMasterRecipeDialogPopUpController.$inject = [
        'DcsPlus.Frame.Logic.commandRouter'
    ];

    function omsMasterRecipeDialogPopUpController(commandRouter) {
        var vm = this;

    vm.execute = function(command) {
        commandRouter.execute(command);
    };
} 

controller.spec.js

    describe('omsMasterRecipeDialogPopUpController', function () {

    var omsMasterRecipeDialogPopUpControllerTest;
    var commandRouterMock;
    var $scope;

    beforeEach(function () {
        registerMockServices();
        prepareCommandRouterMock();
    });


    describe('execute', function () {
        it('1. Should check if execute method is defined', function() {
            expect(omsMasterRecipeDialogPopUpControllerTest.execute).toBeDefined();
        });

        it('2. Should check if execute method of commandRouter is called', function() {
            omsMasterRecipeDialogPopUpControllerTest.execute();
            expect(commandRouterMock.execute).toHaveBeenCalled();
        });

    });

    function prepareCommandRouterMock() {
        commandRouterMock = {
            execute: function() {
            }
        };
    }

     /*beforeEach(function () {
         commandRouterMock = jasmine.createSpyObj('DcsPlus.Frame.Logic.commandRouter', ['execute']);
     });*/

    function registerMockServices() {
        angular.mock.module('DcsPlus.AP.OmsControl', function ($provide) {
            $provide.value('DcsPlus.Frame.Logic.commandRouter', commandRouterMock);
        });


        angular.mock.inject(['$controller', '$rootScope', 'dialogService',
            function ($controller, $rootScope, dialogService) {
            $scope = $rootScope.$new();
            spyOn(commandRouterMock, 'execute').and.callThrough();

            // Init the controller, passing our spy service instance
            omsMasterRecipeDialogPopUpControllerTest = $controller('DcsPlus.AP.OmsControl.omsMasterRecipeDialogPopUpController', {
                $scope: $scope
            });
        }]);
    }
});

1 Ответ

0 голосов
/ 24 февраля 2019

В начале вы создаете commandRouterMock, но никогда никому его не назначаете.

Попробуйте это:

beforeEach(function () {
    registerMockServices();
    commandRouterMock = prepareCommandRouterMock();
});

function prepareCommandRouterMock() {
    return {
         execute: function() {
        }
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...