#reactjs #npm #webpack #jestjs
#reactjs ( реакция ) #нпм #веб-пакет #jestjs ( шутки )
Вопрос:
У меня есть (частный) модуль npm, который экспортирует несколько компонентов React. Модуль поставляется в комплекте с Webpack, и в сгенерированном пакете ссылка на один из компонентов (скажем Warning
) выглядит следующим образом:
t.d(n,"Warning",function(){return ge})
Затем у меня есть проект React, импортирующий этот модуль:
import { Warning } from 'my-custom-module';
...
render() {
return (
<Warning>Lorem ipsum</Warning>
);
}
Все это работает нормально, но когда я создаю Jest snapshot компонента выше, я ожидаю, что снимок будет выглядеть как
<Warning>Lorem ipsum</Warning>
но это выглядит так, как:
<ge>Lorem ipsum</ge>
По какой-то причине Jest принимает уменьшенный идентификатор вместо экспортированного имени компонента. Как я могу увидеть название компонента в моментальном снимке Jest? Я не уверен, действительно ли мне нужно настроить конфигурацию моего Webpack или настройки Jest…
Ответ №1:
Поскольку вы ссылаетесь на уродливую версию ‘my-custom-module’, она попытается выполнить рендеринг с уродливыми именами. Однако я предполагаю, что на самом деле вам нужно неглубоко отобразить ваш компонент.
Для этого вы можете использовать средство мелкой визуализации Enzyme libraries .
//MyAwesomeComponent.js
import { Warning } from 'my-custom-module';
export default class MyAwesomeComponent extends Component{
render(){
return (<Warning>Lorem ipsum</Warning>);
}
}
//MyAwesomeComponent.test.js
import { shallow } from 'enzyme';
import MyAwesomeComponent from './MyAwesomeComponent';
it('renders <MyAwesomeComponent />', () => {
const shallowMyComponent = shallow(<MyComponent />);
expect(shallowMyComponent).toMatchSnapshot()
});
Это должно показать ваш снимок как предупреждение, не углубляясь на уровень глубже.
Комментарии:
1. На самом деле я делаю неглубокий рендеринг тестируемого компонента, так что, к сожалению, проблема не в этом.
2. Но ваше замечание относительно «уродовать» направило меня в правильном направлении. Когда я отключаю эту опцию в Webpack (
optimization: { minimize: false }
), модули экспортируются по их первоначальному имени, и в потребляющем проекте моментальные снимки выглядят нормально. В моем случае за минимизацию отвечает потребляющий проект, поэтому нет проблем отключить его в пользовательском модуле.