Redux + karma-webpack - не может прочитать displayName из неопределенного при импорте React.Component

Я использую karma-webpack и я рефакторинг React Component для использования в нескольких местах. Я переместил компонент в его собственный файл, поэтому я могу импортировать его и подключать по- другому, применяя mapStateToProps / mapDispatchToProps в HOC я позже включу на своей странице.

Вот сценарий:

EventTable - import s EventTableComponent, экспорт connect редактируемый / упакованный компонент MyEventTable - import s EventTableComponent, экспорт connect редактируемый / упакованный компонент EventTableComponent - определяет общие реквизиты / поведения для визуализации строк данных

Когда я git mv EventTable для EventTableComponent и рефакторинг кода, чтобы connected вещи находятся в HOC, тесты начинают не в состоянии импортировать EventTableComponent только в karma-webpack, Chrome работает просто отлично, а вид отображается отлично. QA доволен или будет, но моя сборка не удалась.

Сборка терпит неудачу, потому что WrappedComponent не определено для EventTable а также MyEventTable компоненты, которые вызывают connect кинуть сообщение в краткий обзор (cannot read displayName of undefined), но я даже не импортирую ни один из этих файлов в свой тест! Вместо этого происходит сбой во время сборки веб-пакета karma, но до запуска каких-либо тестов.

Я исправил сборку локально, уничтожив вид и сделав "фальшивку" / "замену", например так:

function EventTableComponent () { 
    return (<div>garbage here</div>);
}

Сборка проходит.

Самая запутанная часть во всем этом? Я даже не проверяю HOC вообще. Я импортирую только EventTableComponent в тест, но karma-webpack, как предлагается в документации Redux.

Я написал минимальный пример для иллюстрации: https://gist.github.com/zedd45/cbc981e385dc33d6920d7fcb55e7a3e0

1 ответ

Решение

Я смог решить эту проблему, обманув систему модулей.

// EventTableComponentWrapper.jsx

import EventTableComponent from './EventTableComponent';

if (process.env.NODE_ENV === 'test') {
    module.exports = require('./EventTableComponent.test.jsx');
} else {
    module.exports = EventTableComponent;
}

Я импортирую этот файл в оба компонента HOC, и, основываясь на моей переменной среды, я получаю правильный, и Karma Webpack обманывают, чтобы не взорваться.

Я пришел к такому выводу, основываясь на нескольких выводах, но заслуга в этом SO Post: условная сборка на основе среды с использованием Webpack

а также Wout Mertens из канала Webpack Gitter, чтобы сообщить мне о проблеме, связанной с импортом / экспортом класса ES6.

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