screen
. Menggunakan objek render()
secara konsisten meningkatkan kebolehbacaan dan kejelasan. screen
Manfaat:
Contoh:
bukannya:
<code class="language-javascript">const { getByText } = render(); expect(getByText(/click me/i)).toBeInTheDocument();</code>
<code class="language-javascript">render(); expect(screen.getByText(/click me/i)).toBeInTheDocument();</code>
findBy
pertanyaan bukan findBy
. Ini memastikan pernyataan berjalan hanya selepas rendering elemen. getBy
Manfaat:
Contoh:
<code class="language-javascript">// Component asynchronously fetches and displays a username render(<UserProfile />); const userName = await screen.findByText(/john doe/i); expect(userName).toBeInTheDocument();</code>
boleh mencapai hasil yang sama, tetapi waitFor
lebih disukai untuk fungsi gabungan findBy
dan getBy
. Elakkan menggunakannya bersama -sama. waitFor
<code class="language-javascript">render(<UserProfile />); await waitFor(() => { expect(screen.getByText(/john doe/i)).toBeInTheDocument(); });</code>
within
menghalang perlawanan yang samar -samar. within
Manfaat:
Contoh:
<code class="language-javascript">render( <fieldset name="Personal Information"> <legend>Personal Information</legend> <label htmlFor="personal-name">Name</label> </fieldset> ); const nameLabel = within(screen.getByRole('group')).getByLabelText(/Name/i); expect(nameLabel).toBeInTheDocument();</code>
userEvent
berfungsi, fireEvent
menyediakan simulasi interaksi pengguna yang lebih realistik, termasuk menaip, mengklik, dan tabbing. userEvent
Manfaat:
Contoh:
<code class="language-javascript">import userEvent from '@testing-library/user-event'; render(<LoginForm />); const emailInput = screen.getByLabelText(/email/i); const passwordInput = screen.getByLabelText(/password/i); const submitButton = screen.getByRole('button', { name: /submit/i }); await userEvent.type(emailInput, 'test@example.com'); await userEvent.type(passwordInput, 'password123'); await userEvent.click(submitButton); expect(screen.getByText(/welcome/i)).toBeInTheDocument();</code>
debug()
tidak ternilai untuk kegagalan ujian penyelesaian masalah dengan mencetak struktur DOM ke konsol. debug()
Manfaat:
Contoh:
<code class="language-javascript">const { getByText } = render(); expect(getByText(/click me/i)).toBeInTheDocument();</code>
mensasarkan elemen tertentu juga mungkin:
<code class="language-javascript">render(); expect(screen.getByText(/click me/i)).toBeInTheDocument();</code>
Petua Tambahan:
.toHaveTextContent()
atau .toHaveAttribute()
untuk pernyataan yang tepat. cleanup()
dalam afterEach
menghalang kebocoran dom. Kesimpulan:
RTL mengutamakan ujian pengguna-sentris. Dengan menggunakan teknik -teknik ini, anda akan membuat ujian yang lebih bersih, lebih dipercayai, dan boleh dipelihara, meningkatkan aliran kerja pembangunan keseluruhan anda. Merangkul strategi ini untuk meningkatkan amalan ujian reaksi anda.
Atas ialah kandungan terperinci Ricks untuk Perpustakaan Ujian React untuk menjadikan ujian unit anda lebih baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!