Я скопировал и вставил ваш код в свой собственный тест, и в вашем коде было несколько ошибок, но после их исправления все работало без ошибок. Я отметил некоторые вещи, которые я исправил относительно вашего примера кода.
// Class code
export class MyComponent extends Component {
getThing() {
// FIXED: Don't forget to define thing... and you probably mean this.thing
return thing;
}
render() {
// FIXED: You weren't returning the HTML element here
return <Form />;
}
}
// Test code
let wrapper;
describe("MyComponent tests", () => {
beforeEach(() => {
// FIXED: You don't need the .dive.dive here
wrapper = shallow(<MyComponent />);
// FIXED: Missing closing bracket around the beforeEach
});
it("has a getThing method", () => {
const instance = wrapper.instance();
expect(instance.getThing).toBeDefined();
}); //Invariant Violation: Could not find "store" in either the context or props of "Connect(Form(MyComponent))"
});
Что касается вашей ошибки, при импорте кода компонента не забывайте, что
MyComponent = reduxForm({
...
})(MyComponent)
export default connect(
mapStateToProps,
mapDispatchToProps
)(MyComponent);
На самом деле работает, что означает, что функция connect
также работает. Возможно, лучше разделить ваш container
и ваш component
код на два разных файла, чтобы было проще тестировать компонент отдельно, чем контейнер.
Что касается модульного тестирования контейнера, то в поиске Google "тестирование контейнеров с избыточностью" должны быть найдены ответы на некоторые вопросы о том, как настроить макеты, необходимые для успешного выполнения соединения в модульных тестах.