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.

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