Я пытаюсь проверить, что компонент обновляется должным образом из-за изменений в элементе ввода.Я использую fireEvent.change()
-функцию, и если я проверяю значение найденного узла с помощью getByPlaceholderText
, оно обновляется, как и должно.Однако я не вижу изменений в самом компоненте реакции.
Это может быть потому, что изменения не происходят до повторного рендеринга;как бы это проверить?rerender
библиотекиact-testing-библиотеки запускает компонент «с нуля» (т.е. без нового входного значения), а waitForElement
никогда не находит то, что его ждет.
Вот компонент TestForm.js:
import React from 'react';
import { withState } from 'recompose';
const initialInputValue = 'initialInputValue';
const TestForm = ({ inputValue, setInputValue }) => (
<>
{console.log('inputValue', inputValue)}
<input value={inputValue} onChange={(e) => setInputValue(e.target.value)} placeholder="placeholder" />
{inputValue !== initialInputValue && <div>Input has changed</div>}
</>
);
export default withState('inputValue', 'setInputValue', initialInputValue)(TestForm);
А вот тест, запустите с помощью npx jest test.js
:
import React from 'react';
import { cleanup, fireEvent, render, waitForElement } from 'react-testing-library';
import TestForm from './TestForm';
afterEach(cleanup);
describe('TestForm', () => {
it('Change input', async () => {
const { getByPlaceholderText, getByText } = render(<TestForm />);
const inputNode = getByPlaceholderText('placeholder');
fireEvent.change(inputNode, { target: { value: 'new value' } });
console.log('inputNode.value', inputNode.value);
await waitForElement(() => getByText('Input has changed'));
});
});