2017-02-20 4 views
1

У меня есть проект Angular2 на основе ngrx и построен с @angular/cli: 1.0.0-beta.32.3. Приложение само по себе имеет много общего с официально поддерживаемым примером приложения ngrx: https://github.com/ngrx/example-app.Угловой CLI "ng e2e": отсутствует localStorage в тестах транспортира с ts-node

синхронизировать некоторую часть магазина с помощью LocalStorage https://github.com/btroncone/ngrx-store-localstorage пакета, так:

в моем reducers/index.ts файле (выглядит как оригинальный https://github.com/ngrx/example-app/blob/master/src/app/reducers/index.ts) вместо оригинала:

const developmentReducer: ActionReducer<State> = compose(
    storeFreeze, 
    combineReducers 
)(reducers); 

const productionReducer: ActionReducer<State> = combineReducers(reducers); 

Я получил слегка измененная версия:

const developmentReducer: ActionReducer<State> = compose(
    storeFreeze, 
    localStorageSync(['auth'], true), 
    combineReducers 
)(reducers); 

const productionReducer: ActionReducer<State> = compose(
    localStorageSync(['auth'], true), 
    combineReducers 
)(reducers); 

Работает отлично, никаких проблем.

Вещь I не может запускать проточные испытания e2e с этой установкой. Этот localStorageSync принимает значение localStorage браузера. Однако angular-cli's транспортир использует ts-node, как указано в protractor.conf.js:

beforeLaunch: function() { 
    require('ts-node').register({ 
    project: 'e2e' 
    }); 
}, 

ng e2e завершается с ошибкой:

[19:25:07] I/direct - Using ChromeDriver directly... 
[19:25:09] E/launcher - Error: ReferenceError: localStorage is not defined 
    at Object.exports.localStorageSync (/home/myfolder/e2e-storage-test/node_modules/ngrx-store-localstorage/src/index.ts:118:77) 
    at Object.<anonymous> (/home/myfolder/e2e-storage-test/src/app/reducers/index.ts:32:3) 
    at Module._compile (module.js:570:32) 
    at Module.m._compile (/home/myfolder/e2e-storage-test/node_modules/ts-node/src/index.ts:406:23) 
    at Module._extensions..js (module.js:579:10) 
    at Object.require.extensions.(anonymous function) [as .ts] (/home/myfolder/e2e-storage-test/node_modules/ts-node/src/index.ts:409:12) 

Полный отслеживающий доступен здесь: https://gist.github.com/radoslawroszkowiak/17e53b9043264b6d813df2374e8d4dc8.

Я хотел бы избегать испортить вещи, такие как node-localstorage, поскольку я не хочу, чтобы этот проект использовался для серверной рендеринга, только для среды браузера.

Как обойти эту проблему?

ответ

2

Причина оказалась довольно глупой, как и следовало ожидать.

В одном из тестовых файлов e2e был указан путь к имени из модуля маршрутизации приложения. Это вызвало цепочку импорта, включая компоненты, импортированные в модуль маршрутизации и т. Д.

Поскольку тестовые файлы e2e выполняются с ts-узлом, а не в контексте браузера, ошибка была выброшена, как только компилятор столкнулся с localStorage вхождение.

Снятие проблемного импорта в файле спецификации e2e решило проблему.

Заключение для меня: будьте осторожны при импорте чего-либо из своего приложения в модули e2e.

Смежные вопросы