Я новичок в шутке и энзимах, и я сталкиваюсь с некоторыми ошибками инвариантного нарушения при тестировании компонента реагирования, который потребляет поддержку из контекста реагирования api. Я знаком с ошибками инвариантного нарушения и их возможными причинами, однако в этом контексте я застрял. Некоторые советы очень ценятся. Вот минимальная настройка кода только для демонстрационных целей. Я бегу
«фермент»: «3,7,0»,
«энзим-адаптер-реакция-16»: «1,6,0»,
"jest": "23.6.0".
Обратите внимание, приведенный ниже код работает просто отлично, однако проблема возникает только тогда, когда я пытаюсь проверить MyComponent.jsx.
index.jsx
import * as React from 'react';
import ReactDOM from 'react-dom';
import MyComponentWithContext from "./MyComponent";
const testValue = 'test value';
export const MyContext = React.createContext(testValue);
const App = () => {
return (
<div>
<MyComponentWithContext/>
</div>
)
}
ReactDOM.render(
<MyContext.Provider value={testValue}>
<App/>
</MyContext.Provider>,
document.getElementById('root') || document.createElement('div')
)
MyComponent.jsx
import * as React from 'react';
import {MyContext} from './';
export class MyComponent extends React.Component {
constructor(props) {
super(props)
}
getContextValue() {
return this.props.testValue
}
render() {
return <div>{this.getContextValue()}</div>;
}
}
const MyComponentWithContext = () => (
<MyContext.Consumer>
{testValue => <MyComponent testValue={testValue}/>}
</MyContext.Consumer>
)
export default MyComponentWithContext;
Когда я пытаюсь проверить MyComponent следующим образом:
MyComponent.unit.test.js
import React from 'react';
import {shallow} from 'enzyme';
import {MyComponent} from '../MyComponent';
describe('<MyComponent />', () => {
const testValue = 'test value';
it('should return test value', () => {
const wrapper = shallow(<MyComponent testValue={testValue}/>);
expect(wrapper.instance().getContextValue()).toEqual(testValue);
});
});
Это дает мне следующую ошибку:
Нарушение инварианта: недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс / функция (для составных компонентов), но получено: undefined. Вы, вероятно, забыли экспортировать свой компонент из файла, в котором он определен, или вы могли смешать импорт по умолчанию и с именами.
Проверьте метод визуализации App
.
| ReactDOM.render(
| ^
18 | <MyContext.Provider value={testValue}>
19 | <App/>
20 | </MyContext.Provider>,