Как найти компонент внутри другого компонента в jest?

#reactjs #jestjs #enzyme

#reactjs #jestjs #фермент

Вопрос:

Я хочу найти компонент внутри другого компонента в Jest. После нахождения компонента длина должна быть 1 , но я получаю 0 длину.

Код тестовых примеров выглядит следующим образом —

 beforeEach(() => {
    wrapper = enzyme.mount(
                <Rest
                    onApplyClick={mockOnApplyClick}
                    translateFn={mockTranslateFn}
                    someData={mockSomeData}
                />
            );
});
  

и тогда у нас есть тестовый пример —

 it('Test case', () => {
        let Button= wrapper.find(Button);
        Button.simulate('click');
        expect(wrapper.find(StyledPopover).prop('open')).toBe(true);
        act(() => {
            let newWrapper = wrapper
                .find(<NewComponent {...props} myData={mockMyData[1]} />)
                expect(newWrapper.length).toBe(1);
                console.log(newWrapper.length, "newWrapper.length")
    });
});
  

Я получаю 0 длину, console.log(newWrapper.length) но если мы проходим let newWrapper = wrapper.find(NewComponent) , то я получаю длину 1 . Итак, как решить эту проблему, поскольку я хочу передать props NewComponent , чтобы я мог найти некоторые другие элементы внутри NewComponent .

Комментарии:

1. @hurricane разве не наоборот, вы используете shallow, когда не хотите отображать дочерние компоненты?

2. Вы можете попробовать wrapper.find(NewComponent).setProps({props1: value})

3. @UKS это говорит ReactWrapper::setProps() can only be called on the root. , когда я устанавливаю реквизит

4. Хорошо, вы можете добавить свой компонент Rest?

5. Я внес изменения — act(() => { let newWrapper = wrapper.setProps({ children: <NewComponent {...props} myData={mockMyData[1]} /> }); expect(newWrapper.length).toBe(1); newWrapper .find(RadioButton) .first() .props() .onChange('hello', {target:{id:'hello' , isChecked: false} }); теперь он говорит TypeError: не удается прочитать свойство ‘id’ неопределенного