Я пытаюсь передать контекст компоненту React, но поскольку я тестирую Enzyme, я хотел бы добавить компонент в его родительский динамически, чтобы я мог проверить его состояние , Тест выглядит следующим образом:Передача контекста динамически добавленного дочернего элемента в ReactJS
describe('<BeaconConfig />',() => {
it('inherits the config from BeaconConfig',() => {
mount(<BeaconConfig persistent><div id="parent"></div></BeaconConfig>, { attachTo: document.body });
const wrapper = mount(<Beacon/>, { attachTo: document.getElementById('parent') });
expect(wrapper.state('persistent')).to.be(true);
});
});
тест завершается неудачей, поскольку persistent
свойство состояния Beacon
компонента является undefined
, хотя он должен быть унаследован от BeaconConfig
через контекст.
Когда я пытаюсь положить Beacon
непосредственно внутри JSX, когда я устанавливаю BeaconConfig
то он работает отлично, но в этом случае Фермент не позволит мне получить в компонентном состоянии Beacon
, так как он не является корень.
Нормально ли, что React не распространяет контекст на мой компонент, когда я добавляю его динамически к его родительскому?
Я вижу, что вы имеете в виду о разности VDOM. Просто привязка компонента к элементу, который оказывается визуализированным как дочерний элемент компонента верхнего уровня, не делает его частью этого дерева компонентов. Проблема с предложенным вами подходом заключается в том, что Enzyme не позволит вам просмотреть состояние компонента, отличного от root, по крайней мере, я не мог понять, как это сделать в прошлый раз, когда я проверил. –
См. Https://github.com/airbnb/enzyme/blob/master/src/ReactWrapper.js#L529 –