有效的反應組件測試至關重要。 React測試庫(RTL)簡化了此過程,強調用戶交互測試。 本文介紹了五種高級RTL技術,用於編寫更有效和可維護的單元測試。
screen
>
對像一致提高可讀性和清晰度。 render()
screen
增強的測試可讀性。
而不是:
>使用:
<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
對於組件,呈現元素異步(例如,在API調用後),請使用>。這樣可以確保僅在元素渲染後才能發出斷言。 findBy
getBy
由於時機問題消除了片狀測試。
>或者,
<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>
和waitFor
功能而言,findBy
是優選的。 避免一起使用它們。 getBy
waitFor
<code class="language-javascript">render(<UserProfile />); await waitFor(() => { expect(screen.getByText(/john doe/i)).toBeInTheDocument(); });</code>
within
>
靶向特定容器內的元素時,
within
防止意外元素選擇。
這種有針對性的方法會導致更清潔的,更上下文相關的測試。
<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
是功能性的,
fireEvent
userEvent
好處:
更準確的事件模擬。
這種方法可確保測試準確反映現實世界的用戶行為。
<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>
5。
用於DOM檢查debug()
好處:
>示例:
<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>
>其他提示:
.toHaveTextContent()
.toHaveAttribute()
cleanup()
可防止DOM洩漏。 afterEach
>RTL優先考慮以用戶為中心的測試。 通過應用這些技術,您將創建更清潔,更可靠和可維護的測試,從而改善整體開發工作流程。 擁抱這些策略以增強您的反應測試實踐。
以上是RICKS用於React測試庫,以使您的單位測試更好的詳細內容。更多資訊請關注PHP中文網其他相關文章!