Angular-CLI "ng e2e": отсутствует localStorage в тестах транспортиров с ts-узлом
У меня есть проект Angular2, основанный на ngrx и построенный с @angular/cli: 1.0.0-beta.32.3
, Само приложение имеет много общего с официально поддерживаемым примером приложения ngrx: https://github.com/ngrx/example-app.
Я синхронизирую некоторую часть магазина с 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);
Работает просто отлично, никаких проблем вообще нет.
Дело в том, что я не могу запустить тесты транспортира 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, поскольку я не хочу, чтобы этот проект использовался для рендеринга на стороне сервера, только в среде браузера.
Как обойти эту проблему?
1 ответ
Причина оказалась довольно глупой, как и следовало ожидать.
В одном из тестовых файлов e2e был импортирован путь к файлу из модуля маршрутизации приложения. Это вызвало цепочку импорта, включая компоненты, импортированные в модуль маршрутизации и т. Д.
Поскольку тестовые файлы e2e выполняются с помощью ts-node, а не в контексте браузера, ошибка возникла, как только компилятор обнаружил localStorage
вхождение.
Удаление проблемного импорта в файле спецификации e2e решило проблему.
Вывод для меня: будьте осторожны при импорте чего-либо из вашего приложения в модули e2e.