У меня есть компонент реакции, который я хочу протестировать
В методе рендеринга у меня есть следующий лог c:
<div id="someArea">
{this.renderSection(
this.state.oneCollection,
'First:'
)}
{this.renderSection(
this.state.twoCollection,
'Second:'
)}
</div>
renderSection = (collection: number[], caption: string) => {
console.log(collection.length);
return (collection.length > 0 &&
<>
<h6>{caption}</h6>
... Collection-related logic ...
</>);
}
let wrapper = mount<MyComponent>(<MyComponent
{...props}
...
/>);
const state: MyComponentState = {
oneCollection: [
1
],
twoCollection: [
2
]
};
await new Promise(res => {
wrapper.instance().setState(state, () => {
res();
});
});
wrapper.instance().render();
console.log('Test OneCollection length');
console.log((wrapper.instance().state as MyComponentState).oneCollection.length);
console.log('Test TwoCollection length');
console.log((wrapper.instance().state as MyComponentState).twoCollection.length);
console.log(wrapper.html());
Я пробовал буквально все
.update(), with wrapper re-assignment
.instance().forceUpdate(), .instance().render()
wrapper.setState({})
wrapper.instance().setState({})
вот где я закончил
Я читал почти все проблемы с github, каждый вопрос SO, который похож на мою проблему, пробовал все перечисленное там, но безуспешно
Главное, когда я регистрирую свойства состояния в тесте - он выводит правильные значения Но когда я регистрирую свойства состояния внутри метода рендеринга - он выводит неправильные значения
Похоже, что состояние просто игнорируется при рендеринге внутри фермента
Как решить?