React Testing Library: Jak wyczyścić dane z kontrolki?
Opublikowano: 12.09.2023 - tagi: JavaScript React Testowanie Test Komponent Formularz Kontrolka
Usuwanie danych
Załóżmy, że testujesz przypadek: formularz jest wypełniony danymi i potrzebujesz przed sprawdzeniem testu, wyczyścić daną kontrolkę. Jak to zrobić?
Komponent:
import {useState} from "react";
export function MyComponent({ userName }: { userName: string}) {
const [name, setName] = useState(userName);
const onInputChange = e => {
setName(e.target.value);
}
return (
<>
{ name &&
<div>
Hello {name}! How are you?
</div>
}
<div>
<label htmlFor="name">Your name:</label>
<input value={name} id="name" name="name" onChange={onInputChange} />
</div>
</>
)
}
Test:
import {render, screen} from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import {MyComponent} from "./MyComponent";
test('should edit user name', async () => {
// given
render(<MyComponent userName="Iwona" />);
const input = getByDisplayValue('Iwona');
await userEvent.clear(input);
// when
await userEvent.type(input, 'Adam');
// then
expect(getByText('Hello Adam! How are you?')).toBeInTheDocument();
});
Na starcie przekazywana jest wartość do komponentu, która jest przypisana jest do kontrolki.
Żeby wprowadzić nową wartość, musimy kontrolkę wyczyścić. Robi się to za pomocą metody: clear z biblioteki: user-event. Jeśli zakomentujesz tę linijkę wartość kontrolki po wywołaniu metody: type będzie: "IwonaAdam".