Позвоните на $state.go не работает в модульном тесте

Я работаю над приложением на основе Angular 1.5, angular-ui-router а также WebPack для которого я хочу сделать модульные тесты на части объявления модуля, особенно на state Конфигурация (я хочу проверить исходный код resolve часть).

Все остальные юнит-тесты моего приложения работают нормально, но на этот раз это выглядит как мой звонок $state.go никогда не обрабатываются:

describe('Simple Module', () => {
    beforeEach(angular.mock.module('ui.router', 'my-app'));

    let $state;
    let $location;
    let $httpBackend;

    beforeEach(inject((_$location_, _$state_, _$httpBackend_) => {
        $state = _$state_;
        $location = _$location_;
        $httpBackend = _$httpBackend_;
    }));

    describe('app.onlineListing.error', () => {
        it('go to state', () => {
            const state = 'app.onlineListing.error';    
            $state.go(state);
            // PROBLEM IS HERE...
            // $state.current.name is empty ('') just like if $state.go was never called
            // It's not better with $location.url and $httpBackend.flush
            // ...
            expect($state.current.name).toBe(state);
            // I will spy on myService and expect that myService.getData has been called
            // but currently state is not reach so resolve parts are never triggered...
        });
    });
});

Вот мой модуль приложения:

export default angular.module('my-app', ['oc.lazyLoad', 'ui.router', mySimpleModule.name])
    .config(($stateProvider, ...) => {
        ...
        $stateProvider
            .state('app', {
                abstract: true,
                ...
            }
    });

Есть объявление mySimpleModule:

export default angular.module('my-simple-module', [
    'ui.router'
])
    .config(($stateProvider) => {
        $stateProvider
            .state('app.onlineListing', {
                url: '/onlineListing',
                abstract: true,
                views: {
                    body: {
                        template: '<ui-view />'
                    }
                }
            })

            .state('app.onlineListing.error', {
                url: '/error',
                template: require('./configurationError/configurationError.html'),
                controller: 'onlineListingConfigurationErrorCtrl',
                controllerAs: 'controller',
                resolve: {
                    // @ngInject
                    modules: ($q, $ocLazyLoad) => {
                        return $q((resolve) => {
                            require(['./configurationError/configurationError.js'], (module) => {
                                resolve($ocLazyLoad.load({ name: module.default }));
                            });
                        });
                    },
                    fetchedData: (myService) => {
                        // Finally I want my test to check if getData is called
                        return myService.getData();
                    }                        
                }
            })
    });

редактировать

Я также пробую этот урок (это именно то, чего я пытаюсь достичь), но он не работает лучше.

0 ответов

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