Никогда не работал с Legacy Context, а его страница документации довольно скудная. Чтобы протестировать компонент, который зависит от контекста, вы должны передать этот контекст, и есть несколько вариантов.
- Энзим
mount()
/ shallow()
предоставляет второй аргумент options
, которыйможет использоваться для передачи контекста. Но я не уверен, работает ли он в контексте Legacy
const wrapper = mount(<MyComponent />, { context: {storedData: {testData: 1} } });
Используйте дополнительную обертку для предоставления контекста:
function createWrapperForContext (contextData) {
return class Wrapper extends React.Component {
getChildContext() {
return contextData;
}
render() {
return this.props.children;
}
};
}
....
const ContextWrapper = createWrapperForContext(testData);
const elementWrapper = mount(<ContextWrapper><YourComponent /></ContextWrapper>)
Если возможно, предпочтительнее перейти на современный Context API, это гораздо удобнее.
PS зачем вам нужен доступ context
в конструкторе? Если бы вы работали с ним в render()
, вы бы никогда не беспокоились о том, что «контекст обновлен, но render()
все еще ссылается на старые значения».