- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優點與缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 進行元件生命週期管理
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - 地圖
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - 上下文
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - 片段
- ReactJS - 高階元件
- ReactJS - 整合其他庫
- ReactJS - 最佳化效能
- ReactJS - Profiler API
- ReactJS - 埠
- ReactJS - 無 ES6/ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - 渲染 Props
- ReactJS - 靜態型別檢查
- ReactJS - 嚴格模式
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 輪播圖
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - testInstance.find() 方法
術語“testInstance”不是 React 中定義的概念,但通常在測試 React 元件時使用。它指的是元件在測試環境中渲染時生成的元件例項,允許我們執行測試並對元件的行為進行斷言。
在程式設計中,我們可能需要使用 find() 函式來定位特定的測試例項。讓我們開始並學習本教程中如何使用它。
find() 函式就像一個偵探,在一個物件組中查詢某個東西。它的工作原理是將每個物件與另一個名為 test() 的方法設定的條件進行比較。目標是找到唯一滿足要求的一個物件。
語法
testInstance.find(test)
引數
testInstance - 這是我們要搜尋的物件組。
test - 這是我們建立的一個特殊函式。它檢查每個物件是否滿足某些條件。如果它對一個物件返回 true,則表示找到了該物件。
返回值
find() 函式檢視 testInstance 中的每個物件。對於每個物件,它都會執行 test() 函式。如果 test() 對恰好一個物件返回 true,則該物件就是結果。如果 test() 對不恰好一個物件返回 true,則會發生錯誤。
示例
示例 - 按鈕元件
在這個示例中,我們將有一個 Button 元件及其對應的測試檔案。因此,我們可以在點選按鈕後根據預期行為進行斷言。假設我們想要檢查在點選按鈕時是否呼叫了某個函式 (mockFunction)。程式碼如下所示:
Button.js
import React from 'react';
const Button = ({ onClick, label }) => (
<button onClick={onClick} data-testid="test-button">
{label}
</button>
);
export default Button;
Button.test.js
import React from 'react';
import { render, fireEvent, screen } from '@testing-library/react';
import Button from './Button';
test('Button click works', () => {
// Mock function to check if it is called
const mockFunction = jest.fn();
render(<Button onClick={mockFunction} label="Click me" />);
const buttonInstance = screen.getByTestId('test-button');
fireEvent.click(buttonInstance);
expect(mockFunction).toHaveBeenCalledTimes(1);
});
輸出
示例 - 列表元件
在這個示例中,測試針對 List 元件,我們需要對列表中渲染的項進行斷言。假設我們想要檢查列表是否包含特定項且順序正確。toHaveTextContent 函式用於檢查顯示的 listInstance 是否包含請求的文字內容。
List.js
import React from 'react';
const List = ({ items }) => (
<ul data-testid="test-list">
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
export default List;
List.test.js
import React from 'react';
import { render, screen } from '@testing-library/react';
import List from './List';
test('List renders items', () => {
const items = ['Item 1', 'Item 2', 'Item 3'];
render(<List items={items} />);
const listInstance = screen.getByTestId('test-list');
expect(listInstance).toHaveTextContent('Item 1');
expect(listInstance).toHaveTextContent('Item 2');
expect(listInstance).toHaveTextContent('Item 3');
});
輸出
示例 - 表單元件
在這個應用中,我們將有一個 Form 元件 Form.js 及其相應的測試檔案 Form.test.js。在 Form 元件的測試中,在模擬輸入上的更改事件後,我們想要檢查輸入的值是否已相應更新。因此,程式碼如下所示:
Form.js
import React, { useState } from 'react';
const Form = () => {
const [inputValue, setInputValue] = useState('');
const handleChange = (e) => {
setInputValue(e.target.value);
};
return (
<form data-testid="test-form">
<input
type="text"
value={inputValue}
onChange={handleChange}
data-testid="test-input"
/>
</form>
);
};
export default Form;
Form.test.js
import React from 'react';
import { render, fireEvent, screen } from '@testing-library/react';
import Form from './Form';
test('Form input changes value', () => {
render(<Form />);
const inputInstance = screen.getByTestId('test-input');
fireEvent.change(inputInstance, { target: { value: 'New Value' } });
expect(inputInstance.value).toBe('New Value');
});
輸出
總結
因此,find() 函式允許我們藉助一個特殊的條件檢查函式來搜尋物件集合。現在,我們透過建立三個不同的應用程式,深入瞭解了 testInstance.find() 方法。