Я не уверен, какое именно поведение вы пытаетесь протестировать, но во многих случаях нет необходимости явно «тестировать» весь подключенный компонент, если вы не планируете проводить интегрированное тестирование или функциональное тестирование.
Чтобы устранить проблему, с которой вы столкнулись, я бы порекомендовал вам экспортировать дочерний компонент (обратите внимание на export
на BaseComponent
):
const componentsWrapper = (Components, selectData) => {
export class BaseComponent extends Component {
// ... rest of the logic
}
}
Затем в вашем тесте файл, мы используем энзим .find()
до найти узел, который соответствует селектору. В этом случае наш селектор BaseComponent
.
const wrapper = shallow(<Components store={store} />)
const wrapperInstance = wrapper.dive().find(BaseComponent).instance();
Оттуда у вас будет доступ к экземпляру класса BaseComponent
, и вы можете использовать его для вызова его методов или шпионажа за его методами.
Причина, по которой вы сталкиваетесь с ошибкой, указанной в вопросе, объясняется в документации по ферментам :
При использовании React 16 и выше, instance () возвращает ноль для функциональных компонентов без сохранения состояния.
Следовательно, .instance()
можно вызывать только для самого компонента, а не для всего подключенного компонента.