mcpField
E
extension-test

extension-test

github.com/quangplテスト・品質64212 回インストール7 週間前に更新
リポジトリ

extension-test について

Chrome 拡張機能の開発者向けテストスキルです。Jest と Puppeteer を使った単体・統合・E2E テストを扱い、Chrome API のモック方法と E2E 実行時の制約も説明します。

主な機能

  1. 01単体・統合・E2E テストの設計
  2. 02Jest によるロジックとサービス連携のテスト
  3. 03Puppeteer による Chrome 上のテスト
  4. 04一般的な chrome.* API のモック
  5. 05設定とスクリプトの例

活用シーン

  1. 01拡張機能の個別ロジックのテスト
  2. 02メッセージ通信とサービス連携の検証
  3. 03Chrome 上での UI と動作の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/quangpl/browser-extension-skills --skill extension-test

インストール後、Claude Code で/extension-testを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
chrome-api-mocks.md
e2e-testing-puppeteer.md
unit-integration-testing.md

詳細

拡張機能のテスト

🚀 Premium にアップグレード Premium バージョンは https://app.extensionbooster.net/dashboard/services/extension-ai-kit から入手できます。

テストレイヤーのアーキテクチャ

Unit Tests (Jest)          → Test isolated logic, chrome.* API mocks
Integration Tests (Jest)   → Test service interactions, message passing
E2E Tests (Puppeteer)      → Test in real Chrome with extension loaded

重要な制約:拡張機能はヘッドレスモードでは実行できません。E2E テストには headless: false または Chrome の --headless=new(Chrome 112 以降)が必要です。


レイヤー 1:ユニットテスト+インテグレーションテスト(Jest)

インストール
npm install -D jest @types/jest ts-jest jest-chrome
# For React popup:
npm install -D @testing-library/react @testing-library/jest-dom jsdom
jest.config.ts
export default {
  preset: "ts-jest",
  testEnvironment: "jsdom",
  setupFilesAfterEnv: ["./jest.setup.ts"],
  moduleNameMapper: {
    "^@/(.*)$": "<rootDir>/src/$1",
  },
};
jest.setup.ts(最小構成)
import chrome from "jest-chrome";
Object.assign(global, { chrome });

モックの完全なセットアップ → chrome-api-mocks.md ユニットテスト/インテグレーションテストのパターン → unit-integration-testing.md


レイヤー 2:E2E(Puppeteer)

インストール
npm install -D puppeteer
Chrome で拡張機能を起動する
import puppeteer from "puppeteer";
import path from "path";

const browser = await puppeteer.launch({
  headless: false, // extensions require non-headless
  args: [
    `--disable-extensions-except=${path.resolve("dist")}`,
    `--load-extension=${path.resolve("dist")}`,
  ],
});
拡張機能 ID を取得する
const targets = await browser.targets();
const extTarget = targets.find((t) => t.type() === "service_worker");
const extUrl = extTarget?.url() ?? "";
const [, , extId] = extUrl.split("/");

E2E テストのパターン全般 → e2e-testing-puppeteer.md


Chrome API のモック戦略

API方法
chrome.storageメモリ内ストアでモックする
chrome.runtime.sendMessagejest.fn() + モックレスポンス
chrome.tabscreateMockTab ヘルパーを使った jest.fn()
chrome.actionjest.fn() のスタブ
chrome.alarmsjest.fn() のスタブ

すべてのモック → chrome-api-mocks.md


package.json のスクリプト

{
  "scripts": {
    "test:unit": "jest --testPathPattern=unit",
    "test:integration": "jest --testPathPattern=integration",
    "test:e2e": "jest --testPathPattern=e2e --runInBand",
    "test": "npm run test:unit && npm run test:integration"
  }
}

E2E テストは個別に実行してください(--runInBand)。Puppeteer のテストは直列で実行する必要があります。


参考ファイル

コメント