Skip to content
Vitest 3
Main Navigation 指南 & API配置瀏覽器模式進階 API
3.2.0
2.1.9
1.6.1
0.34.6

繁體中文

English
简体中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

繁體中文

English
简体中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

外觀

Sidebar Navigation

簡介

為何選擇 Vitest

快速入門

功能特色

配置參考

API

測試 API 參考

模擬函式

Vi

expect

expectTypeOf

assert

assertType

指南

命令列介面

測試篩選

測試專案

報告器

程式碼覆蓋率

快照

模擬(Mocking)

平行化

型別測試

Vitest UI

內聯測試

測試上下文

測試註解

測試環境

擴展匹配器

IDE 整合

偵錯

常見錯誤

遷移指南

遷移到 Vitest 3.0

從 Jest 遷移

效能

測試效能分析

提升效能

瀏覽器模式

進階 API

與其他測試執行器的比較

本頁導覽

擴展匹配器 ​

Vitest 與 Chai 和 Jest 相容,因此您可以選擇使用 chai.use API 或 expect.extend 來擴展匹配器。

本指南將深入探討如何使用 expect.extend 擴展匹配器。如果您對 Chai 的 API 感興趣,請參閱其指南。

若要擴展預設匹配器,請呼叫 expect.extend 並傳入一個包含您自訂匹配器的物件。

ts
expect.extend({
  toBeFoo(received, expected) {
    const { isNot } = this;
    return {
      // 請勿根據 isNot 改變您的 "pass" 值。Vitest 會自動處理。
      pass: received === 'foo',
      message: () => `${received} is${isNot ? ' not' : ''} foo`,
    };
  },
});

如果您正在使用 TypeScript,可以在環境宣告檔案(例如:vitest.d.ts)中,使用以下程式碼擴展預設的 Assertion 介面:

ts
import 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Matchers<T = any> extends CustomMatchers<T> {}
}
ts
import 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Assertion<T = any> extends CustomMatchers<T> {}
  interface AsymmetricMatchersContaining extends CustomMatchers {}
}

TIP

自 Vitest 3.2 起,您可以擴展 Matchers 介面,以便在 expect.extend、expect().* 和 expect.* 方法中同時擁有型別安全的斷言。在此之前,您必須為它們分別定義不同的介面。

WARNING

請務必在您的 tsconfig.json 中包含環境宣告檔案。

匹配器的回傳值應與以下介面相容:

ts
interface ExpectationResult {
  pass: boolean;
  message: () => string;
  // 如果您傳遞這些值,當匹配器不通過時,它們會自動顯示在差異報告中,
  // 因此您無需自行列印差異。
  actual?: unknown;
  expected?: unknown;
}

WARNING

如果您建立非同步匹配器,請務必在測試中 await 結果 (await expect('foo').toBeFoo()):

ts
expect.extend({
  async toBeAsyncAssertion() {
    // ...
  },
});

await expect().toBeAsyncAssertion();

匹配器函數的第一個參數是接收到的值(即 expect(received) 內的值)。其餘參數則直接傳遞給匹配器。

匹配器函數可以存取 this 上下文,其中包含以下屬性:

isNot ​

如果匹配器是透過 not 呼叫的(expect(received).not.toBeFoo()),則回傳 true。

promise ​

如果匹配器是透過 resolved 或 rejected 修飾詞呼叫的,此值將包含該修飾詞的名稱。否則,它將是一個空字串。

equals ​

這是一個工具函數,允許您比較兩個值。若值相等,則回傳 true,否則回傳 false。此函數在內部幾乎用於所有匹配器,並預設支援帶有非對稱匹配器的物件。

utils ​

這包含一組工具函數,您可以用來顯示訊息。

this 上下文也包含有關當前測試的資訊。您也可以透過呼叫 expect.getState() 來取得它。最有用的屬性是:

currentTestName ​

當前測試的完整名稱(包括 describe 區塊)。

testPath ​

當前測試檔案的路徑。

Pager
上一頁測試環境
下一頁IDE 整合

以 MIT 授權條款 發布。

版權所有 (c) 2021-Present Vitest Team

https://vitest.dev/guide/extending-matchers

以 MIT 授權條款 發布。

版權所有 (c) 2021-Present Vitest Team