Библиотека тестирования React - несколько fireEvent не проверяют текст

Я хочу написать свой компонент. У меня есть форма с выделением и абзац с текстом. Когда я выбираю вариант «6», текст абзаца меняется на «6 частей». Когда я выбираю вариант «9», текст абзаца меняется на «9 штук» и т. Д.

Проблема в том, что работает только с первого раза. На втором у меня старый текст в абзаце. Как я могу обновлять каждое изменение выбора?

const { getByTestId } = renderForm();

const textElem = getByTestId('text');
const select = getByTestId('select');


fireEvent.change(select, { target: { value: '6' } });

// works fine
expect(textElem).toHaveTextContent('6 pieces');


fireEvent.change(select, { target: { value: '9' } });

// is still 6 pieces
expect(textElem).toHaveTextContent('9 pieces');

Я пробовал также с act, но получил те же результаты:

act(()=>{
    fireEvent.change(select, { target: { value: '6' } });
});

// works fine
expect(textElem).toHaveTextContent('6 pieces');


act(()=>{
    fireEvent.change(select, { target: { value: '9' } });
});

// is still 6 pieces
expect(textElem).toHaveTextContent('9 pieces');

Также пробовал с rerender - результаты те же.


person IceManSpy    schedule 27.07.2020    source источник
comment
Не могли бы вы воспроизвести в codesandbox?   -  person aquinq    schedule 27.07.2020
comment
Я не могу создать codebox, потому что структура немного сложна;)   -  person IceManSpy    schedule 28.07.2020


Ответы (1)


После запуска изменения вам нужно сделать новый getByTestId() и подтвердить его.

fireEvent.change(select, { target: { value: '9' } }); expect(getByTestId('text')).toHaveTextContent('9 pieces')

person Dobby Dimov    schedule 27.07.2020
comment
К сожалению до сих пор получаю 6 штук. Мой вклад заключен в Форник. Так что я проверял ценности в Формике. При 1-м изменении это 6, а при 2-м изменении по-прежнему 6. Так что мне нужно найти способ обновить его. - person IceManSpy; 28.07.2020
comment
Я видел, что fireEvent.change запускается только один раз: / - person IceManSpy; 28.07.2020