2017-02-15 6 views
12

У меня есть компонент, как это:Как проверить метод детского компонента с ферментом?

<Parent> 
    <Child/> 
</Parent> 

и <Child/> компонент есть метод foo. Я хочу протестировать метод foo, но я не знаю, как его получить. Я пробовал:

mount(<Parent><Child/></Parent>).props().children.foo 

или

mount(<Parent><Child/></Parent>).children().foo 

, но оба они являются undefined. Я не могу использовать .instance(), потому что это не root. Я не могу установить <Child/> только потому, что <Parent> что-то добавить (реактивный маршрутизатор context.router) на context, и мне они нужны, когда init <Child/>. Любая идея с этим?

+1

Похоже, это по-прежнему невозможно или, по крайней мере, сложно: https://github.com/airbnb/enzyme/issues/361 – Leonardo

+0

Протестируйте компоненты реакции ниже в дереве, прежде чем прокладывать себе путь вверх. Также экспортируйте развернутую версию вашего компонента для тестирования, чтобы удалить зависимость компонента от реагирующего маршрутизатора. – therewillbecode

ответ

0

Я думаю, что ваша проблема отличается от того, как тестировать дочерние компоненты.

Мой первый вопрос: Почему вы проверяете, имеет ли дочерний компонент определенный метод в тестировании компонентов родителя?

ИМХО вам нужно иметь тест, специфичный для этого компонента, а затем в этом тесте вы проверяете, существует ли метод.

Просто, чтобы не уйти без ответа, вы пробовали .find(Child).instance().foo?

1

Я бы подумал о написании тестов только для вашего родительского класса, а затем отдельного тестового файла, чтобы тестировать только вашего ребенка.

После того, как вы смонтировали вас компонент с помощью:

const component = mount(<Child>); 

вы затем получить доступ к его методам использования:

component.instance().methodname 

Вы можете делать такие вещи, как переопределить его jest.fn() и проверить надлежащим образом.