\d+)\)$/).groups;
+ expect(rgb).to.have.all.keys('r', 'g', 'b');
+
+ const luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;
+ expect(luma).to.be.lessThan(100);
+ });
+});
+```
+
+もし「JS テスト・フレームワーク」に慣れ親しんでいる方であれば、`describe`、`it`、`expect` などは見覚えがあるはずです。また、mocha の設定(セットアップ)と解除(ティアダウン)を行なうための、やや複雑な`before()`と`after()`コールバックも用意されています。
+テスト本体ではない行には、セットアップ・コードとティアダウン・コードを説明するコメントの記載があります。
+[WebdriverIO のテスト仕様](/ja/develop/tests/webdriver/example/webdriverio/#テスト仕様)の「Spec ファイル」に慣れている場合は、WebDriver 関連の項目をさらにいくつか設定する必要があるため、テスト以外のコードがより多くなっていることに気付くでしょう。
+
+## テスト・スイートの実行
+
+依存関係とテスト・スクリプトの設定がすべて完了しましたので、実行してみましょう。
+
+
+
+次のような出力が表示されるはずです:
+
+```text
+➜ selenium git:(main) ✗ yarn test
+yarn run v1.22.11
+$ Mocha
+
+
+ Hello Tauri
+ ✔ should be cordial (120ms)
+ ✔ should be excited
+ ✔ should be easy on the eyes
+
+
+ 3 passing (588ms)
+
+Done in 0.93s.
+```
+
+上記の `test/test.js` の `describe` で生成した `Hello Tauri` テスト・スイートでは、`it` に記載した三つのテスト項目がすべて合格していることがわかります。
+
+[Selenium] とともに、テスト・スイートに「フックアップ」する(別処理を挟み込む)処理により、Tauri アプリケーションをまったく修正せずに「e2e テスト」を実行することができました!
+
+
+
+**e2e テスト** end-to-end test の略記。システム全体を「先端から終端まで」(つまり最初から最後まで)動作検証するテスト手法。自動システム全検証。システム毎にテスト・コードを準備すると工数・費用が増大するため、テスト自動化ツールが利用されています。
+
+
+
+[モデル・アプリケーションの基本設定]: /ja/develop/tests/webdriver/example/
+[selenium]: https://selenium.dev/ja/
+[完成版モデル・プロジェクト]: https://github.com/chippers/hello_tauri
+[mocha]: https://mochajs.org/
+[chai]: https://www.chaijs.com/
+[`selenium-webdriver`]: https://www.npmjs.com/package/selenium-webdriver
+
+
+ 【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
+
diff --git a/src/content/docs/ja/develop/Debug/tests/WebDriver/Example/webdriverio.mdx b/src/content/docs/ja/develop/Debug/tests/WebDriver/Example/webdriverio.mdx
new file mode 100644
index 0000000000..b4403ddf61
--- /dev/null
+++ b/src/content/docs/ja/develop/Debug/tests/WebDriver/Example/webdriverio.mdx
@@ -0,0 +1,224 @@
+---
+title: WebdriverIO を利用する
+sidebar:
+ order: 31
+i18nReady: true
+---
+
+{/* TODO: REVISE COPY TO V2 */}
+
+import CommandTabs from '@components/CommandTabs.astro';
+import TranslationNote from '@components/i18n/TranslationNote.astro';
+
+:::note[モデル・アプリケーション]
+
+この「[WebdriverIO]」(ウェブドライバ IO)設定ガイドでは、手順を追って読み進めるために、前々章の「[モデル・アプリケーションの基本設定]」に目を通していることを前提としています。それとは別に、一般的な情報としても役に立つでしょう。
+
+:::
+
+この章の WebDriver テストの事例では、[WebdriverIO] とそのテスト・スイートを使用しますので、
+`npm` または `yarn` とともに Node.js がすでにインストールされていることが前提となります([完成版モデル・アプリケーション] では `yarn` が使用されていますが)。
+
+## テスト用ディレクトリの作成
+
+プロジェクト内にテストを記述するための場所を作成しましょう。
+このプロジェクト事例では「ネスト化された」ディレクトリを使用しますが、これは後ほど他のフレームワークについても詳しく調べるためで、通常は「一つのフレームワーク」だけが必要です。
+`mkdir -p webdriver/webdriverio` で、使用するディレクトリを作成します。以下、この設定ガイドでは、`webdriver/webdriverio` ディレクトリ内にいると仮定します。
+
+## WebdriverIO プロジェクトの初期化
+
+既存の `package.json` を使用して、このテスト・スイートをブートストラップ(起動)します。というのも、既に具体的な [WebdriverIO] 設定オプションを選定済であり、シンプルで実用的なソリューションを紹介したいためです。
+この項の最後の「**> ここをクリック・・・**」の部分に、白紙の状態から設定する手順についての設定ガイドが折り畳まれています。
+
+`package.json`:
+
+```json
+{
+ "name": "webdriverio",
+ "version": "1.0.0",
+ "private": true,
+ "scripts": {
+ "test": "wdio run wdio.conf.js"
+ },
+ "dependencies": {
+ "@wdio/cli": "^7.9.1"
+ },
+ "devDependencies": {
+ "@wdio/local-runner": "^7.9.1",
+ "@wdio/mocha-framework": "^7.9.1",
+ "@wdio/spec-reporter": "^7.9.0"
+ }
+}
+```
+
+テスト・スイートとして [WebdriverIO] 設定を実行するスクリプトがあり、これは `test` コマンドとして利用可能です。
+また、最初にセットアップするときに `@wdio/cli` コマンドによって追加される依存関係もあります。
+手短に言えば、こうした依存関係は、ローカル WebDriver ランナー、テスト・フレームワークとしての [Mocha]、および単純な Spec Reporter を使用した最も単純なセットアップのためのものです。
+
+
+ ここをクリック(プロジェクトを白紙の状態から設定する場合)
+
+CLI は対話型であり、自分で操作するツールを選択できます。
+ただし、設定ガイドの記述とは相違する場合があり、相違部分は自分で設定する必要があることに注意してください。
+
+この npm プロジェクトに [WebdriverIO] CLIを追加しましょう。
+
+
+
+次に、対話型 config コマンドを実行して [WebdriverIO] テスト・スイートを設定するには、次のコマンドを実行します:
+
+
+
+
+
+## 設定
+
+`package.json` 内の `test` スクリプトに `wdio.conf.js` ファイルが記載されていることに気付いたかもしれません。
+これは、[WebdriverIO] 設定ファイルで、テスト・スイートのほとんどの側面を制御するものです。
+
+`wdio.conf.js`:
+
+```javascript
+const os = require('os');
+const path = require('path');
+const { spawn, spawnSync } = require('child_process');
+
+// `tauri-driver` 子プロセスを追跡
+let tauriDriver;
+
+exports.config = {
+ specs: ['./develop/tests/specs/**/*.js'],
+ maxInstances: 1,
+ capabilities: [
+ {
+ maxInstances: 1,
+ 'tauri:options': {
+ application: '../../target/release/hello-tauri-webdriver',
+ },
+ },
+ ],
+ reporters: ['spec'],
+ framework: 'mocha',
+ mochaOpts: {
+ ui: 'bdd',
+ timeout: 60000,
+ },
+
+ // Webdriver セッション用に必要な Rust プロジェクトがビルドされていることを確認
+ onPrepare: () => spawnSync('cargo', ['build', '--release']),
+
+ // Webdriver 要求をプロキシできるように、セッション開始前に `tauri-driver` が実行されていることを確認
+ beforeSession: () =>
+ (tauriDriver = spawn(
+ path.resolve(os.homedir(), '.cargo', 'bin', 'tauri-driver'),
+ [],
+ { stdio: [null, process.stdout, process.stderr] }
+ )),
+
+ // セッションの開始時に生成した「tauri-driver」プロセスをクリーンアップ
+ afterSession: () => tauriDriver.kill(),
+};
+```
+
+`exports.config` オブジェクトのプロパティに興味がある場合は、[webdriver ドキュメント] を参照してください。
+webdriverIO 固有ではない項目については、`onPrepare`、`beforeSession`、および `afterSession` 内でなぜコマンドを実行しているのかを説明するコメントがあります。
+「スペック(テスト仕様)」も `"./develop/tests/specs/**/*.js"` に設定されるので、次に「テスト仕様」を作成しましょう。
+
+## テスト仕様
+
+「テスト仕様」には、実際のアプリケーションをテストするコードが含まれています。
+テスト・ランナーはこの「テスト仕様」を読み込み、必要に応じて自動的に実行します。では、指定したディレクトリに「テスト仕様」を作成しましょう。
+
+`test/specs/example.e2e.js`:
+
+```javascript
+// 「16進カラー」`#abcdef` から「輝度(luma ルーマ)」を計算
+function luma(hex) {
+ if (hex.startsWith('#')) {
+ hex = hex.substring(1);
+ }
+
+ const rgb = parseInt(hex, 16);
+ const r = (rgb >> 16) & 0xff;
+ const g = (rgb >> 8) & 0xff;
+ const b = (rgb >> 0) & 0xff;
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
+}
+
+describe('Hello Tauri', () => {
+ it('should be cordial', async () => {
+ const header = await $('body > h1');
+ const text = await header.getText();
+ expect(text).toMatch(/^[hH]ello/);
+ });
+
+ it('should be excited', async () => {
+ const header = await $('body > h1');
+ const text = await header.getText();
+ expect(text).toMatch(/!$/);
+ });
+
+ it('should be easy on the eyes', async () => {
+ const body = await $('body');
+ const backgroundColor = await body.getCSSProperty('background-color');
+ expect(luma(backgroundColor.parsed.hex)).toBeLessThan(100);
+ });
+});
+```
+
+最初の [luma] 関数は、テストの一つに対する単なるヘルパー関数であり、実際のアプリケーションのテストとは関係ありません。
+もし他のテスト・フレームワークに慣れ親しんでいる方であれば、`describe`、`it`、`expect` など、用いられている同様の関数が「開放」(外部アクセス可能化)されていることに気付くかもしれません。
+その他の API、たとえば `$` などの項目や公開されたメソッドなど、については、[WebdriverIO API ドキュメント] で説明されています。
+
+## テスト・スイートの実行
+
+設定とテスト仕様がすべて準備できたので、実行してみましょう!
+
+
+
+次のような出力が表示されるはずです:
+
+```text
+➜ webdriverio git:(main) ✗ yarn test
+yarn run v1.22.11
+$ wdio run wdio.conf.js
+
+Execution of 1 workers started at 2021-08-17T08:06:10.279Z
+
+[0-0] RUNNING in undefined - /develop/tests/specs/example.e2e.js
+[0-0] PASSED in undefined - /develop/tests/specs/example.e2e.js
+
+ "spec" Reporter:
+------------------------------------------------------------------
+[wry 0.12.1 linux #0-0] Running: wry (v0.12.1) on linux
+[wry 0.12.1 linux #0-0] Session ID: 81e0107b-4d38-4eed-9b10-ee80ca47bb83
+[wry 0.12.1 linux #0-0]
+[wry 0.12.1 linux #0-0] » /develop/tests/specs/example.e2e.js
+[wry 0.12.1 linux #0-0] Hello Tauri
+[wry 0.12.1 linux #0-0] ✓ should be cordial
+[wry 0.12.1 linux #0-0] ✓ should be excited
+[wry 0.12.1 linux #0-0] ✓ should be easy on the eyes
+[wry 0.12.1 linux #0-0]
+[wry 0.12.1 linux #0-0] 3 passing (244ms)
+
+
+Spec Files: 1 passed, 1 total (100% completed) in 00:00:01
+
+Done in 1.98s.
+```
+
+Spec Reporter 部には、`test/specs/example.e2e.js` ファイルからの三つのテストすべてと、最終レポート `Spec Files: 1 passed, 1 Toal (100% Complete) in 00:00:01` が表示されます。
+
+[WebdriverIO] テスト・スイートを使用することで、わずか数行の設定と一つのコマンド実行だけで、Tauri アプリケーションの e2e テストを簡単に実行できました! さらに素晴らしいのは、アプリケーションを一切修正する必要がなかったということです。
+
+[モデル・アプリケーションの基本設定]: /ja/develop/tests/webdriver/example/
+[webdriverio]: https://webdriver.io/ja/
+[完成版モデル・アプリケーション]: https://github.com/chippers/hello_tauri
+[mocha]: https://mochajs.org/
+[webdriver ドキュメント]: https://webdriver.io/docs/configurationfile
+[webdriverio api ドキュメント]: https://webdriver.io/docs/api
+[luma]: https://ja.wikipedia.org/wiki/ルーマ
+
+
+ 【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
+
diff --git a/src/content/docs/ja/develop/Debug/tests/WebDriver/ci.md b/src/content/docs/ja/develop/Debug/tests/WebDriver/ci.md
new file mode 100644
index 0000000000..2c828c4704
--- /dev/null
+++ b/src/content/docs/ja/develop/Debug/tests/WebDriver/ci.md
@@ -0,0 +1,102 @@
+---
+title: 継続的インテグレーション(CI)
+description: WebDriver のテスト
+sidebar:
+ order: 21
+i18nReady: true
+---
+
+import TranslationNote from '@components/i18n/TranslationNote.astro';
+
+Linux といくつかのプログラムを利用して仮のディスプレイを作成すると、CI (継続的インテグレーション・テストツール)上で [`tauri-driver`] を使用して [WebDriver] テストの実行が可能になります。
+以下では、[WebdriverIO] による[予め作成したテスト事例]と GitHub Actions を使用しています。
+
+これには次の二点が前提になっています:
+
+1. Tauri アプリケーションはリポジトリのルートにあり、`cargo build --release` を実行するとバイナリがビルドされる
+2. 「[WebDriverIO] テスト・ランナー」は `webdriver/webdriverio` ディレクトリにあり、そのディレクトリで `yarn test` が使用されると実行される
+
+以下は `.github/workflows/webdriver.yml` にあるコメント付きの GitHub Actions ワークフロー・ファイルです。
+
+```yaml
+# リポジトリがプッシュされたときにこのアクションを実行
+on: [push]
+
+# ワークフローの名前
+name: WebDriver
+
+jobs:
+ # test という名前の単一ジョブ
+ test:
+ # test ジョブの表示名
+ name: WebDriverIO Test Runner
+
+ # 最新の Linux 環境を指定(we want to run on)
+ runs-on: ubuntu-22.04
+
+ # ジョブが**順番に**実行する手順
+ steps:
+ # 「ワークフロー・ランナー」のコードをチェックアウト(確認)
+ - uses: actions/checkout@v4
+
+ # Tauri が Linux 上でコンパイルするために必要なシステム依存関係をインストール
+ # `tauri-driver` を実行するための追加の依存関係 (`webkit2gtk-driver` と `xvfb`)に注意
+ - name: Tauri dependencies
+ run: |
+ sudo apt update && sudo apt install -y \
+ libwebkit2gtk-4.1-dev \
+ build-essential \
+ curl \
+ wget \
+ file \
+ libxdo-dev \
+ libssl-dev \
+ libayatana-appindicator3-dev \
+ librsvg2-dev \
+ webkit2gtk-driver \
+ xvfb
+
+ - name: Setup rust-toolchain stable
+ id: rust-toolchain
+ uses: dtolnay/rust-toolchain@stable
+
+ # 破損しているアプリケーションのテストを避けるために、WebDriver テストの前に Rust テストを実行
+ - name: Cargo test
+ run: cargo test
+
+ # WebdriverIO テスト中に使用されるアプリケーションのリリースビルドを実行
+ - name: Cargo build
+ run: cargo build --release
+
+ # 最新安定版 node バージョンをインストール(執筆時点)
+ - name: Node 20
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: 'yarn'
+
+ # Yarn を使って Node.js の依存関係をインストール
+ - name: Yarn install
+ run: yarn install --frozen-lockfile
+ working-directory: webdriver/webdriverio
+
+ # `tauri-driver` の最新バージョンをインストール
+ # 注意: tauri-driver のバージョンは他の Tauri のバージョン番号とは無関係です
+ - name: Install tauri-driver
+ run: cargo install tauri-driver --locked
+
+ # WebdriverIO テスト・スイートを実行
+ # `xvfb-run`(先ほどインストールした依存関係)を実行して、仮のディスプレイ・サーバーを作成し、コードを変更せずにアプリケーションをヘッドレス(無人)で実行できるようにします
+ - name: WebdriverIO
+ run: xvfb-run yarn test
+ working-directory: webdriver/webdriverio
+```
+
+[予め作成したテスト事例]: /ja/develop/tests/webdriver/example/webdriverio/
+[webdriver]: https://www.w3.org/TR/webdriver/
+[`tauri-driver`]: https://crates.io/crates/tauri-driver
+[webdriverio]: https://webdriver.io/
+
+
+ 【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
+
diff --git a/src/content/docs/ja/develop/Debug/tests/WebDriver/index.mdx b/src/content/docs/ja/develop/Debug/tests/WebDriver/index.mdx
new file mode 100644
index 0000000000..e140c11677
--- /dev/null
+++ b/src/content/docs/ja/develop/Debug/tests/WebDriver/index.mdx
@@ -0,0 +1,100 @@
+---
+title: WebDriver
+description: WebDriver のテスト
+sidebar:
+ order: 10
+ label: 概要
+i18nReady: true
+---
+
+import TranslationNote from '@components/i18n/TranslationNote.astro';
+
+[WebDriver] は、主として自動テストを目的とした、Web ドキュメントとのやりとりを行なうための標準化されたインターフェースです。
+Tauri は、クロス・プラットフォーム・ラッパー [`tauri-driver`] の下で、ネイティブ・プラットフォームの [WebDriver] サーバーを利用することで [WebDriver] インターフェースをサポートしています。
+デスクトップでは、Windows と Linux のみがサポートされます。macOS では WKWebView ドライバー・ツールが利用できないためです。
+iOS と Android では、ソフトウェアの自動テスト・エコシステム [Appium 2] を通じて動作しますが、現在のところ、そのプロセスは簡素効率化されていません。
+
+## システムの依存関係
+
+次のコマンドを実行して、最新の [`tauri-driver`] をインストールするか、既存のインストールを更新します:
+
+```shell
+cargo install tauri-driver --locked
+```
+
+Tauri は、現在、各プラットフォームのネイティブ [WebDriver] サーバーを利用しているため、サポートされているプラットフォームで [`tauri-driver`] を実行するには以下のようにいくつかの前提条件があります。
+
+### Linux の場合
+
+Linux プラットフォームでは `WebKitWebDriver` を使用します。このバイナリが既にシステム内にあるかどうかを確認してください(コマンド `which WebKitWebDriver` で確認できます)、というのも、ディストリビューションによっては、このバイナリが通常の WebKit パッケージにバンドルされているためです。
+他のプラットフォームでは、たとえば Debian ベースのディストリビューションの `webkit2gtk-driver` のように、別のパッケージが用意されている場合があります。
+
+### Windows の場合
+
+アプリケーションをビルドおよびテストしている Windows Edge のバージョンと一致する [マイクロソフト・エッジ・ウェブドライバ] のバージョンを必ず取得してください。
+そのバージョンは、最新版 Windows のインストールではほぼ常に最新の安定版バージョンになるはずです。
+この二つのバージョンが一致しない場合は、接続時に「WebDriver テスト・スイート」がハングする可能性があります。
+
+
+
+**テスト・スイート** testing suite: ソフトウェアの検証時に用いる一連の「テスト・ケース」を効率的に実行するために一纏まりにしたもの。
+
+
+
+ダウンロードには `msedgedriver.exe` というバイナリが含まれています。[`tauri-driver`] は `$PATH` でそのバイナリを検索するので、パス上でアクセス可能になっていることを確認するか、[`tauri-driver`] で `--native-driver` オプションを使用してください。
+Windows [CI](#継続的インテグレーションci) マシン上で Edge と Edge Driver とのバージョンが確実に同期するようにするために、CI セットアップ・プロセスの一環として自動的にダウンロードしたいと思うかもしれません。
+この処理の実行方法に関する手引きは後日追加されるものと思われます。
+
+## モデル・アプリケーション事例
+
+
+
+**モデル・アプリケーション** 原文 Example Applications: ソフトウェアの検証対象となる「アプリケーションの事例」の意味であるが、本稿では検証時の「モデル」とする事例の意味で「モデル・あっプリケーション」訳しています。
+
+
+
+以下は、WebDriver を用いてテストされるアプリケーションの最小構成事例を作成するステップ・バイ・ステップの作成ガイドです。
+
+この作成ガイドの結果と、完成した最小限のコードベースを手早く確認したい場合は、https://github.com/chippers/hello_tauri を参照してください。
+
+import { LinkCard, CardGrid } from '@astrojs/starlight/components';
+
+
+
+
+
+
+
+## 継続的インテグレーション(CI)
+
+上記の事例には、GitHub Actions を利用してテストするための CI スクリプトも付属していますが、この概念をもう少し詳しく説明している以下の「WebDriver CI ガイド」(次章)も興味深いかもしれません。
+
+
+
+
+
+**CI/CD** ソフトウェア開発でのワークフロー自動化手法。詳しくは「[GitLab](https://about.gitlab.com/ja-jp/topics/ci-cd/)」を参照してください。
+
+
+
+[webdriver]: https://www.w3.org/TR/webdriver/
+[`tauri-driver`]: https://crates.io/crates/tauri-driver
+[tauri-driver]: https://crates.io/crates/tauri-driver
+[マイクロソフト・エッジ・ウェブドライバ]: https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/
+[Appium 2]: https://appium.io/docs/ja/latest/
+
+
+ 【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
+
diff --git a/src/content/docs/ja/develop/Debug/tests/index.mdx b/src/content/docs/ja/develop/Debug/tests/index.mdx
new file mode 100644
index 0000000000..cb413808e2
--- /dev/null
+++ b/src/content/docs/ja/develop/Debug/tests/index.mdx
@@ -0,0 +1,34 @@
+---
+title: テスト
+description: Tauri ランタイム内外でのテスト手法
+sidebar:
+ order: 10
+ label: 概要
+i18nReady: true
+---
+
+import TranslationNote from '@components/i18n/TranslationNote.astro';
+
+Tauri は、モック・ランタイム(模擬実行)を利用した単体テストと統合テストの両方をサポートしています。モック・ランタイムでは、ネイティブ WebView ライブラリは実行されません。
+詳細については、次章「[Mock Tauri APIs](モック・ランタイム)」をご覧ください。
+
+Tauri は、また、WebDriver プロトコルを利用した「エンド・ツー・エンド」(自動システム全検証)のテスト・サポートも提供しています。デスクトップとモバイルの両方で動作しますが、デスクトップ WebDriver クライアントが提供されていない macOS では動作しません。
+詳細については、[WebDriver] の章をご覧ください。
+
+Tauri では、ビルド自動化ツール「GitHub Action」の実行を支援するために [tauri-action] が提供されていますが、各プラットフォームがコンパイルに必要なライブラリをインストールしていれば、どの種類の「CI/CD ランナー」でも Tauri で使用できます。
+
+
+
+**CI/CD** "Continuous Integration and Continuous
+Deployment"(継続的統合/継続的展開)の略。ランナーは、CI/CD
+と連携して、変更されたプロジェクトを自動的にパイプライン処理するビルドやテストを実行する機能。
+
+
+
+[Mock Tauri APIs]: /ja/develop/tests/mocking/
+[WebDriver]: /ja/develop/tests/webdriver/
+[tauri-action]: https://github.com/tauri-apps/tauri-action
+
+
+ 【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
+
diff --git a/src/content/docs/ja/develop/Debug/tests/mocking.md b/src/content/docs/ja/develop/Debug/tests/mocking.md
new file mode 100644
index 0000000000..e2b3ec895f
--- /dev/null
+++ b/src/content/docs/ja/develop/Debug/tests/mocking.md
@@ -0,0 +1,190 @@
+---
+title: Mock Tauri APIs(モック・ランタイム)
+sidebar:
+ order: 10
+i18nReady: true
+---
+
+import TranslationNote from '@components/i18n/TranslationNote.astro';
+
+フロントエンド・テストを作成する場合、ウィンドウをシミュレートしたり IPC 呼び出しをインターセプトしたりするための「仮の」Tauri 環境(いわゆる **モッキング**)を用意するのが一般的です。
+[`@tauri-apps/api/mocks`] モジュールは、簡単にこの擬似環境を実現するための便利なツールをいくつか提供しています:
+
+:::caution
+
+疑似環境でのテスト毎の変更(モックでの状態変化)を取り消すために、各テストの実行後に必ず「モック」をクリアしてください。詳細については、目次 **Reference** の「Mock」の章にある [`clearMocks()`] のドキュメントを参照してください。
+
+:::
+
+## IPC 要求
+
+テストでの最も一般的な検証事項は、「IPC 要求」をインターセプトすることです。これはさまざまな状況で役立ちます。たとえば:
+
+- 正しいバックエンド呼び出しが行なわれていることを確認する
+- バックエンド関数からの異なる結果をシミュレーションする
+
+Tauri では「IPC 要求」をインターセプトするための mockIPC 関数が利用できます。具体的な API の詳細については、[こちら][`mockipc()`] をご覧ください。
+
+:::note
+
+以下の事例では テスト・フレームワークの [Vitest] を使用していますが、[jest] のような他のフロントエンド・テスト・ライブラリを使用することもできます。
+
+:::
+
+```javascript
+import { beforeAll, expect, test } from "vitest";
+import { randomFillSync } from "crypto";
+
+import { mockIPC } from "@tauri-apps/api/mocks";
+import { invoke } from "@tauri-apps/api/core";
+
+// 「jsdom テスト環境」には WebCrypto 実装が付属していません
+beforeAll(() => {
+ Object.defineProperty(window, 'crypto', {
+ value: {
+ // @ts-ignore
+ getRandomValues: (buffer) => {
+ return randomFillSync(buffer);
+ },
+ },
+ });
+});
+
+
+test("invoke simple", async () => {
+ mockIPC((cmd, args) => {
+ // 二つの数字を加算するだけの「add」という Rust コマンドをシミュレートします
+ if(cmd === "add") {
+ return (args.a as number) + (args.b as number);
+ }
+ });
+});
+```
+
+時には IPC 呼び出しに関するより多くの情報を追跡したい場合があります; たとえば、コマンドは何回呼び出されたか、そもそもコマンドは呼び出されたのかどうか、などです。
+このようなテストには、他のスパイ・ツール(監視)およびモック・ツールと一緒に [`mockIPC()`] を使用できます。
+
+```javascript
+import { beforeAll, expect, test, vi } from "vitest";
+import { randomFillSync } from "crypto";
+
+import { mockIPC } from "@tauri-apps/api/mocks";
+import { invoke } from "@tauri-apps/api/core";
+
+// 「jsdom テスト環境」には WebCrypto 実装が付属していません
+beforeAll(() => {
+ Object.defineProperty(window, 'crypto', {
+ value: {
+ // @ts-ignore
+ getRandomValues: (buffer) => {
+ return randomFillSync(buffer);
+ },
+ },
+ });
+});
+
+
+test("invoke", async () => {
+ mockIPC((cmd, args) => {
+ // 二つの数字を加算するだけの「add」という Rust コマンドをシミュレートします
+ if(cmd === "add") {
+ return (args.a as number) + (args.b as number);
+ }
+ });
+
+ // vitest が提供するスパイ・ツールを使用して、モック化された関数を追跡することができます。
+ const spy = vi.spyOn(window.__TAURI_INTERNALS__, "invoke");
+
+ expect(invoke("add", { a: 12, b: 15 })).resolves.toBe(27);
+ expect(spy).toHaveBeenCalled();
+});
+```
+
+
+
+**モック化** mocked function「モック化された関数」。テスト環境などで呼び出されるモック関数で指定され、仮想的・擬似的に実行される(仮の)関数。
+
+
+
+「[サイドカー]」(埋め込まれた外部プログラム)やシェル・コマンドへの IPC 要求をモック化するには、`spawn()` または `execute()` が呼び出されたときのイベント・ハンドラーの ID を取得し、この ID を使用してバックエンドが返信するイベントを発行させます:
+
+```javascript
+mockIPC(async (cmd, args) => {
+ if (args.message.cmd === 'execute') {
+ const eventCallbackId = `_${args.message.onEventFn}`;
+ const eventEmitter = window[eventCallbackId];
+
+ // 「標準出力 Stdout」イベントは何度でも呼び出し可能です
+ eventEmitter({
+ event: 'Stdout',
+ payload: 'some data sent from the process',
+ });
+
+ // 「プロミス」での処理を完了するには、最後に「Terminated」イベントを呼び出します
+ eventEmitter({
+ event: 'Terminated',
+ payload: {
+ code: 0,
+ signal: 'kill',
+ },
+ });
+ }
+});
+```
+
+
+
+**プロミス** Promise: Promise は JavaScript で非同期処理が完了したときに結果(resolve または reject)を返すオブジェクトです。
+
+
+
+## Windows の場合
+
+Windows では、時として Windows 固有のコード(たとえば、スプラッシュ・スクリーン・ウィンドウ)のために、異なるウィンドウのシミュレーションが必要となる場合があります。
+[`mockWindows()`] メソッドを使用すると、仮のウィンドウ・ラベルを作成できます。最初の文字列が「現在の」ウィンドウ(つまり、JavaScript 自身がそのウィンドウ内にあると認識しているウィンドウ)を識別し、その他の文字列は追加ウィンドウとして扱われます。
+
+:::note
+
+[`mockWindows()`] はウィンドウの存在を見せ掛けるだけで、ウィンドウのプロパティを擬装するわけではありません。ウィンドウのプロパティをシミュレートするには、[`mockIPC()`] を使用して正規の呼び出しをインターセプトする必要があります。
+
+:::
+
+```javascript
+import { beforeAll, expect, test } from 'vitest';
+import { randomFillSync } from 'crypto';
+
+import { mockWindows } from '@tauri-apps/api/mocks';
+
+// 「jsdom テスト環境」には WebCrypto 実装が付属していません
+beforeAll(() => {
+ Object.defineProperty(window, 'crypto', {
+ value: {
+ // @ts-ignore
+ getRandomValues: (buffer) => {
+ return randomFillSync(buffer);
+ },
+ },
+ });
+});
+
+test('invoke', async () => {
+ mockWindows('main', 'second', 'third');
+
+ const { getCurrent, getAll } = await import('@tauri-apps/api/webviewWindow');
+
+ expect(getCurrent()).toHaveProperty('label', 'main');
+ expect(getAll().map((w) => w.label)).toEqual(['main', 'second', 'third']);
+});
+```
+
+[`@tauri-apps/api/mocks`]: /reference/javascript/api/namespacemocks/
+[`mockipc()`]: /reference/javascript/api/namespacemocks/#mockipc
+[`mockwindows()`]: /reference/javascript/api/namespacemocks/#mockwindows
+[`clearmocks()`]: /reference/javascript/api/namespacemocks/#clearmocks
+[Vitest]: https://vitest.dev
+[jest]: https://jestjs.io/ja/
+[サイドカー]: /ja/develop/sidecar.mdx
+
+
+ 【※ この日本語版は、「Jan 22, 2025 英語版」に基づいています】
+