mcpField
V
Vibe Test — Browser Testing Agent

Vibe Test — Browser Testing Agent

ローカル
github.com/AishwaryShrivastav開発ツール172 週間前に更新

Vibe Test — Browser Testing Agent について

Vibe Testは、コーディングエージェント向けのコード認識型ブラウザーテストサーバー兼CLIです。ソースコードからシナリオを作成し、Playwrightで実行して、実行間の変化を追跡します。

主な機能

  1. 0114個のMCPブラウザーテストツール
  2. 02ソースコードからのルートとシナリオ抽出
  3. 03Playwrightによるブラウザーテスト実行
  4. 04回帰と修正の追跡
  5. 05HTMLテストレポート生成

活用シーン

  1. 01アプリのルートとフォームのテスト
  2. 02コード変更による回帰の確認
  3. 03未テストのルートとカバレッジ不足の特定

MCP 対応

MCPサーバーとしてAIエディターに14個のテストツールを提供し、コードベースのスキャン、ブラウザー探索、シナリオ実行、レポート生成を可能にします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"aishwaryshrivastav-vibe-testing": {
"command": "npx",
"args": [
"-y",
"vibe-testing"
]
}
}
}
起動コマンドnpx -y vibe-testing

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmvibe-testing0.4.6

ツール

14

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
urlstringはい実行中のアプリケーションのベース URL(例: http://localhost:3000 または https://staging.myapp.com)。アプリが staging/dev URL で実行されている場合は、localhost ではなくその URL を指定してください。
modeenumいいえfast = 高速なヒューリスティック スキャン。deep = ダイアログや機能を含む完全な抽出(デフォルト)。fast | deep
codebase_pathstringはいプロジェクトルートディレクトリの絶対パス。

詳細

vibe-testing

npm version npm downloads GitHub stars Node.js MCP License: MIT CI

AI コーディングエージェント向けの、コードを把握したブラウザーテストです。

製品サイト · npm · MCP Registry · Smithery · プライバシー · 公開状況

Awesome MCP Servers に掲載されています。ダウンロードバッジには npm のパッケージ累計ダウンロード数が表示されます。npx によるパッケージ取得もこの合計に含まれます。

vibe-testing はコードベースを読み込み、実際のルートとフィールド名を使ってテストを行い、実際の Playwright ブラウザーで実行します。何が壊れたかを記憶し、直近の変更で何が修正されたか、何がデグレードしたかを知らせます。MCP サーバーとして動作し、エディター(Claude Code、Cursor、Windsurf、VS Code Copilot、Roo Code)に 14 個のテストツールを提供するほか、スタンドアロン CLI としても利用できます。

このリポジトリは、release-qa スキルを備えた Agent Plugin でもあります。互換性のあるエージェントは、テストツールに加え、カバレッジ、エビデンス、回帰チェック、明確なリリース判定を含むシニア QA のワークフローを利用できます。

cd /path/to/your/project
npx vibe-testing@latest init

次にエディターを開いて、次のように伝えてください。

「このコードベースをスキャンして、http://localhost:3000 に対してテストしてください」


コードを把握したテストでできること

Playwright MCP はエージェントに手を与えます。vibe-testing はテストのワークフローを与えます。コードから導出したシナリオ、実行をまたいだ記憶、レポートを備えています。ステートレスなブラウザーツールにはできないことが 2 つあります。

1. 2 回実行すると、何を壊したかがわかります。 実行のたびに .vibe/run-snapshot.json に書き込み、前回の実行との差分を取ります。スキャンのたびに .vibe/route-manifest.json に書き込み、ルートの差分を取ります。2 回目の実行では、結果がずらりと並ぶ代わりに、デグレードと修正が表示されます。

Changes since last run
  Fixed:      /login
  Regression: /checkout
  New:        /admin/users

同じ差分は、run_full_test と run_converge の snapshot_diff、および scan_codebase の route_changes としてエディターにも届きます。そのため、レポートをスクロールする人がいなくても、エージェントは「そのコミット後にチェックアウトが壊れた」と指摘できます。不安定なルート、動作するセレクター、計測されたタイムアウトも実行のたびに記憶されます。

2. ツール内部での LLM 呼び出しはゼロです。 合否の検証は、URL の変更、トーストの検出、API エラーなどに基づくヒューリスティックです。何をテストするかはエディターのモデルが判断し、ブラウザー操作と確認は vibe-testing が行います。API キーは不要で、すでに支払っているエディターのサブスクリプション以外に、実行ごとの費用もかかりません。


目次


仕組み

npx vibe-testing@latest init
        |
Registers 14 MCP tools in your editor
        |
You ask: "Test the checkout flow"
        |
AI calls: scan_codebase -> get_context("checkout") -> login -> explore_page -> execute_scenario -> generate_report
        |
HTML report opens in browser with screenshots of every step

テストケースを書く必要はありません。AI がソースコードを読み、実際のフィールド名やルートを把握して、ブラウザーを開き、すべてをテストして、問題のある箇所を表示します。

init では、次の処理も行います。

  • インストールされている AI エディターを検出します
  • vibe-test をグローバルなエディター設定(~/.claude/settings.json、~/.cursor/mcp.json など)に登録し、すべてのプロジェクト、すべてのセッションでツールを利用できるようにします
  • プロジェクトレベルの MCP 設定と AI 指示ファイルを作成します
  • アプリの URL を自動検出します(.env、vite.config、フレームワークのデフォルト設定を読み取ります)
  • VIBE.md(テスト用の認証情報を編集します)と vibe.config.json を作成します
  • 対応する Playwright Chromium ビルドをインストールします

MCP の設定

Agent Plugin

エージェントが Agent Plugins 標準に対応している場合は、このリポジトリをプラグインとしてインストールします。ポータブルな release-qa スキルが含まれており、API キーなしで公開済みの npm MCP サーバーを起動します。

  • Cursor:https://github.com/AishwaryShrivastav/vibe-testing を Agent Plugin として送信またはインストールします。

  • Claude Code:

    claude plugin marketplace add AishwaryShrivastav/vibe-testing
    claude plugin install vibe-testing@vibe-testing
    
  • その他の互換性のあるエージェント:plugin.json、skills/、mcp.json を含むリポジトリのルートを読み込みます。

プラグインに対応していないエディターでは、以下の直接的な MCP と CLI の設定も引き続き利用できます。

MCPB バンドル

Claude Desktop やその他の MCPB ホストでは、ローカルバンドルを 1 つインストールできます。このリポジトリからビルドして検証します。

npm ci
npm run build:mcpb

成果物は artifacts/vibe-testing-<version>.mcpb に書き込まれます。バンドルの内容、検証手順、Smithery への引き渡し、Playwright Chromium の初回セットアップ要件については、MCPB 配布ガイドをご覧ください。

オプション 1:自動(推奨)
npx vibe-testing@latest init

インストール済みのエディターをすべて検出して設定します。これで完了です。

オプション 2:エディターごとの手動設定
Claude Code

~/.claude/settings.json に追加します(グローバル設定のため、すべてのプロジェクトで機能します)。

{
  "mcpServers": {
    "vibe-test": {
      "command": "npx",
      "args": ["-y", "vibe-testing@latest", "--mcp"]
    }
  }
}

または、プロジェクトルートの .mcp.json に追加します(プロジェクトレベルのみ)。

{
  "mcpServers": {
    "vibe-test": {
      "command": "npx",
      "args": ["-y", "vibe-testing@latest", "--mcp"]
    }
  }
}
Cursor

~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト)に追加します。

{
  "mcpServers": {
    "vibe-test": {
      "command": "npx",
      "args": ["-y", "vibe-testing@latest", "--mcp"]
    }
  }
}
Windsurf

~/.codeium/windsurf/mcp_config.json に追加します。

{
  "mcpServers": {
    "vibe-test": {
      "command": "npx",
      "args": ["-y", "vibe-testing@latest", "--mcp"]
    }
  }
}
VS Code(GitHub Copilot)

プロジェクトの .vscode/mcp.json に追加します。

{
  "servers": {
    "vibe-test": {
      "command": "npx",
      "args": ["-y", "vibe-testing@latest", "--mcp"]
    }
  }
}
Roo Code / Cline

.roo/mcp.json に追加します。

{
  "mcpServers": {
    "vibe-test": {
      "command": "npx",
      "args": ["-y", "vibe-testing@latest", "--mcp"]
    }
  }
}
ローカルビルドから(開発用)
{
  "mcpServers": {
    "vibe-test": {
      "command": "node",
      "args": ["/path/to/vibe-testing/dist/mcp-server.js"]
    }
  }
}

MCP ツールのリファレンス

セットアップ後、AI エディターで利用できる 14 個のツール:

ツール呼び出すタイミング戻り値
configure新しいプロジェクトでは、まずここから始めます。フレームワーク、サーバー、認証を検出します構造化されたセットアップ結果と冪等性のあるプロジェクトファイル
scan_codebase常に最初に実行します。ソースコードを読み、ルート/フォーム/テスト/不足箇所を見つけますルート、フォーム、カバレッジマップ、生成されたシナリオ、前回のスキャン以降の route_changes
get_contextテスト手順を書く前に実行します。機能に関連するソースファイルを返します実際のフィールド名とセレクターを含むソースコード
loginアプリで認証が必要な場合に実行しますログイン後のスクリーンショット、トークンの状態、観測された API 呼び出し
scan_page_elementsページ上のすべてのインタラクティブ要素を確認する場合に実行しますセレクター付きの要素リストとページのスクリーンショット
explore_page「すべて正常に動作するか」を広くテストする場合に実行します操作結果、API 呼び出し、エラー、スクリーンショット
execute_scenario特定のテスト手順を実行します手順ごとのログとスクリーンショット
get_coverageカバレッジマップと未テストのルートを確認しますカバレッジ項目、不足箇所、利用可能なシナリオ
suggest_tests探索後にカバレッジの不足箇所を見つけます優先順位付きの、すぐ実行できる手順付きシナリオ
take_screenshot手早く視覚的に検証します任意の URL のスクリーンショット
generate_reportHTML レポートを作成します(自動で開きます)レポートのパスと概要
run_full_test1 回の実行でスキャン、実行、探索、レポート作成を行います全結果と前回の実行との差分 snapshot_diff
run_convergeしきい値に達するまで反復テストを行いますすべてのラウンドの概要と前回の実行との差分 snapshot_diff
cleanupブラウザーを閉じ、リソースを解放します-
ツールの入力

scan_codebase

{
  "codebase_path": "/path/to/project",
  "url": "http://localhost:3000",
  "mode": "deep"
}

get_context

{ "feature": "login" }
{ "feature": "/checkout" }
{ "feature": "user profile form" }

login

{
  "email": "[email protected]",
  "password": "TestPass123!",
  "login_url": "/login"
}

scan_page_elements / explore_page

{
  "route": "/dashboard",
  "authenticated": true
}

execute_scenario

{
  "scenario": {
    "id": "create-item",
    "name": "Create a new item",
    "route": "/items",
    "steps": [
      { "action": "navigate", "url": "/items", "description": "Open items page" },
      { "action": "click", "selector": "text=Add Item", "description": "Open create form" },
      { "action": "fill", "selector": "[name='title']", "value": "Test Item", "description": "Fill title" },
      { "action": "fill", "selector": "[name='description']", "value": "Test description", "description": "Fill description" },
      { "action": "click", "selector": "button[type='submit']", "description": "Submit form" }
    ],
    "expected_outcome": "New item appears in the list",
    "requires_auth": true
  }
}

ステップアクション:navigate、fill、click、select、wait、assert、upload

CLI と MCP は同じシナリオランナーを使用します。assert ステップは、指定されたすべての条件を評価します。

  • selector:対象が表示されている必要があります。CSS、text=、label=、placeholder= に対応しており、名前付きロケーターは完全一致で照合されます。
  • value:選択された要素上、またはセレクターが指定されていない場合はページ本文上の表示テキストに、この文字列が含まれている必要があります。
  • url:現在の URL が、この絶対 URL、または設定済みのベース URL に対して解決されたパスと完全に一致する必要があります。クエリとフラグメントも含めて照合されます。

例:

{ "action": "assert", "selector": "#confirmation", "value": "Saved", "url": "/settings", "timeout": 5000, "description": "Check saved settings" }

これらのチェックは、各チェックについてステップのタイムアウト(デフォルトは 15000 ms)まで待機します。アサーションに失敗すると、シナリオを停止して失敗したステップと理由を記録し、status: "fail" を返します。MCP では isError: true も設定されます。明示的な条件は、既存の認証チェックとフォーム API チェックの後に判定基準として使用されます。description と expected_outcome の説明文は、実行可能なアサーションではありません。selector、value、url のいずれも指定されていない場合、assert はページの健全性のみをチェックします。表示されている本文テキストが少なくとも 10 文字あり、空でないエラー表示が見えていないことを確認します。この互換性チェックでは、記述された業務上の結果が達成されたことは証明されません。

upload では、ファイル入力用の selector と、value に空でないファイルパスが必要です。相対パスはコードベースのルートを基準に解決されます。非表示のファイル入力にも対応しています。ファイルが存在しない場合、ディレクトリが指定された場合、対象が見つからない場合、または対象がファイル入力ではない場合は、status: "error" を返します。このアクションは Playwright を使用して 1 つのファイルを選択します。アプリケーション側での処理を確認するには、結果の UI に対するアサーションを追加してください。ネイティブのファイル選択ダイアログは自動操作しません。

シナリオには、少なくとも 1 つのステップを含める必要があります。不明なアクションはエラーになります。

take_screenshot

{ "url": "/settings", "authenticated": true, "full_page": false }

run_full_test

{ "url": "http://localhost:3000", "codebase_path": "/path/to/project", "mode": "deep" }

run_converge

{
  "url": "http://localhost:3000",
  "max_followup_rounds": 4,
  "target_pass_rate": 0.92,
  "max_high_severity_gaps": 2
}

推奨ワークフロー

テストセッション全体

AI エディターに次のように伝えます。

Scan this codebase and test it against http://localhost:3000.
Log in with [email protected] / pass123. Explore the dashboard and
settings pages, run the suggested tests, and generate a report.

AI は次の処理を行います。

  1. scan_codebase で、ルート、フォーム、既存のテストを把握します
  2. get_context("login") で、実際のログインフォームのソースコードを読み込みます
  3. login で、実際のブラウザーから認証します
  4. explore_page("/dashboard") で、すべてをクリックし、問題が起きる箇所を確認します
  5. explore_page("/settings") で、同様に確認します
  6. suggest_tests で、テスト範囲の不足を見つけます
  7. execute_scenario x N で、対象を絞ったテストフローを実行します
  8. generate_report で、HTML レポートを自動的に開きます
  9. cleanup で、ブラウザーを閉じます
特定の機能をテストする
Test the checkout flow using vibe-test. Get context for checkout,
then run the full purchase flow with card number 4242424242424242.

AI は次の処理を行います。

  1. scan_codebase(まだ実行していない場合)
  2. get_context("checkout") で、CheckoutForm.tsx、api/orders/route.ts などを読み込みます
  3. login
  4. execute_scenario で、ソースコードをもとに実際のフォームフィールドに入力します
  5. generate_report
バグ修正を検証する
I fixed the login redirect bug. Use vibe-test to confirm it's working.

AI は次の処理を行います。

  1. login で、ログインフローをテストします
  2. take_screenshot で、ログイン後の状態を視覚的に確認します
  3. 画面で確認できた内容を報告します
問題箇所を見つける
Explore every page and tell me what's broken.

AI はすべてのルートで explore_page を実行し、API エラー、壊れた要素、失敗した操作を収集します。その後、問題のある項目に高い優先度を付けて suggest_tests を実行します。


init コマンド

npx vibe-testing@latest init [options]

作成されるファイル:

ファイル場所目的
.mcp.jsonプロジェクトルートClaude Code の MCP 設定(プロジェクト単位)
~/.claude/settings.jsonグローバルClaude Code の MCP 設定(すべてのプロジェクト)
.cursor/mcp.jsonプロジェクトルートCursor の MCP 設定
~/.cursor/mcp.jsonグローバルCursor の MCP 設定(すべてのプロジェクト)
.cursor/rules/vibe-test.mdcプロジェクトCursor のルール、alwaysApply: true
.windsurfrulesプロジェクトWindsurf の指示
~/.codeium/windsurf/mcp_config.jsonグローバルWindsurf の MCP 設定(すべてのプロジェクト)
.vscode/mcp.jsonプロジェクトVS Code Copilot の MCP 設定
.github/copilot-instructions.mdプロジェクトGitHub Copilot の指示
.roo/mcp.jsonプロジェクトRoo Code の MCP 設定
CLAUDE.mdプロジェクトClaude Code のセッション指示
AGENTS.mdプロジェクト汎用エージェント向けの指示(Codex、Devin、Zed)
VIBE.mdプロジェクトテストのガイダンス。認証情報を使って編集してください
vibe.config.jsonプロジェクト設定。URL はプロジェクトから自動検出されます

オプション:

npx vibe-testing@latest init                     # auto-detect editors, register globally + project
npx vibe-testing@latest init --no-global         # project-level only, skip global registration
npx vibe-testing@latest init --skip-browser-install
npx vibe-testing@latest init --editor cursor     # only configure Cursor
npx vibe-testing@latest init --editor claude-code windsurf

init の実行後、VIBE.md を編集して、ログイン URL とテスト用認証情報を設定してください。


CLI コマンド

# Set up in current project
npx vibe-testing@latest init

# Install or repair the matching browser build
npx vibe-testing@latest install-browser

# Run tests against a URL
npx vibe-testing@latest run http://localhost:3000
npx vibe-testing@latest run https://staging.myapp.com --mode deep
npx vibe-testing@latest run http://localhost:3000 --codebase /path/to/project --scope /login /dashboard

# Iterative testing until coverage thresholds
npx vibe-testing@latest converge http://localhost:3000
npx vibe-testing@latest converge http://localhost:3000 --max-rounds 6 --target-pass-rate 0.95

# Open last report in browser
npx vibe-testing@latest report

# Reset memory and screenshots for a clean run
npx vibe-testing@latest reset
run のオプション
オプションデフォルト説明
--mode fast|deepdeepfast:クイックスキャン。deep:完全な機能抽出と探索
--no-headed-ブラウザーをヘッドレスで実行します(デフォルト:表示)
--codebase <path>cwdプロジェクトルートへのパス
--scope <routes...>all指定したルートのみをテストします
-c <path>vibe.config.json設定ファイルのパス

run と converge は、シナリオが見つからない場合、または実行バッチが空の場合に、ゼロ以外の終了コードで失敗します。 MCP の run_full_test と run_converge は、このような場合に isError: true を返します。空の実行では、成功した実行スナップショットは書き込まれず、以前のレポートも置き換えられません。

converge のオプション
オプションデフォルト説明
--max-rounds <n>4ベースライン後の最大追加ラウンド数
--target-pass-rate <r>0.92合格率がこの値(0~1)に達した時点で停止します
--max-gaps <n>2重大なギャップと重要なギャップの合計がこの数まで減った時点で停止します

VIBE.md、プロジェクトのガイダンス

プロジェクトルートに VIBE.md を作成してください。vibe-testing は毎回の実行時に自動で読み込みます。

## Login URL
/login

## Test Credentials
- Email: [email protected]
- Password: TestPass123!

## Never Automate
- delete account
- cancel subscription
- [data-testid="danger-zone"]
- .billing-section

## Known Flaky
- /notifications (WebSocket dependent, skip or expect retry)
- /live-feed

## Notes
- Admin panel at /admin, use [email protected] / adminpass
- Dashboard data loads async, wait for [data-loaded="true"]
- Profile page: click "Edit Profile" before form fields appear

完全なテンプレートについては、VIBE.example.md を参照してください。


設定

vibe.config.json

init が URL を自動検出して自動作成します。必要に応じて編集してください。

{
  "url": "http://localhost:3000",
  "mode": "deep",
  "auth": {
    "strategy": "credentials",
    "login_url": "/login",
    "credentials": {
      "email": "[email protected]",
      "password": "TestPass123!"
    }
  },
  "never_interact": [
    "delete account",
    "cancel subscription",
    "[data-testid='danger-zone']"
  ],
  "scope": {
    "include": ["/**"],
    "exclude": ["/admin/**", "/api/**"],
    "max_routes": 30,
    "seed_routes": ["/live/dev-mode-a-now"]
  },
  "browser": {
    "headed": true,
    "slowMo": 40,
    "timeout": 30000
  }
}
キー説明
urlアプリの URL。localhost またはステージング環境です。init によって自動検出されます。
modefast(ヒューリスティックなスキャン)または deep(完全な抽出と探索)
auth.strategycredentials(フォームログイン)、basic(HTTP Basic Auth)、または skip
auth.login_url標準的でないパスのため、キーワードマッチングでは検出できない場合に指定するログインルート
auth.credentialsログインと生成されるシナリオに使うログイン認証情報。実行間で保持されます
never_interact探索時にスキップするテキストパターンまたは CSS セレクター
scope.include含めるルートパターン。デフォルトの /** は / とすべてのネストされたルートを含みます。* は 1 つのセグメント内にとどまり、末尾の /** はサブルートのルートとその子孫を含みます。その他の文字はリテラルとして扱われます。
scope.excludeテスト対象から除外するルートパターン
scope.max_routes1 回の実行でテストするルート数の上限
scope.seed_routesパーサーが列挙できない動的セグメントを含むルートの具体的な URL(例:/live/[slug] は /live/dev-mode-a-now になります)。シードされた各ルートは、動的な親ルートの requires_auth とソースファイルを継承します。
browser.headedtrue = ブラウザーを表示します。CLI のデフォルトは true、MCP サーバーのデフォルトは false(ヘッドレス)で、ポップアップウィンドウがエディターのセッションを妨げないようにします。
browser.slowMo操作間のミリ秒数(デバッグに便利です)
routesauto(デフォルト)はコードベースからルートを検出します。config は設定に明示的に記載されたルートのみを使用します。

対応フレームワーク

フレームワークルートAPI エンドポイントフォーム
Next.js App Routerはいはいはい
Next.js Pages Routerはいはいはい
Next.js(src/ バリアント)はいはいはい
React SPA(react-router)はい-はい
Vue + Vite(vue-router)はい-はい
Nuxtはいはいはい
SvelteKitはいはいはい
Express / Fastify-はいはい
モノレポ(Turborepo、pnpm、Lerna)はいはいはい

既存のテストファイルも読み込まれ、カバレッジマップの作成に使われます。Jest、Vitest、Playwright、Cypress の各テストスイートが解析されます。


メモリとリグレッション検出

vibe-testing は実行を重ねるごとに学習し、状態を .vibe/ に保存します。

  • 動作するセレクター:[name='email'] が /login で機能したことを記憶し、次回の実行で使用します
  • ルートの所要時間:測定した読み込み時間に基づいてタイムアウトを調整します
  • 認証情報:初回ログイン後に保存され、自動的に再利用されます
  • 不安定なルート:失敗率の高いルートを追跡し、再試行対象としてマークします
  • スキップするルート:一貫してエラーになるルート(URL パラメーターが必要なもの)は自動的にスキップされます
  • ルートマニフェスト(.vibe/route-manifest.json):各スキャンで前回の結果との差分を取り、新規および削除されたルートが scan_codebase の結果の route_changes として表示されるため、AI はすぐにそれらをテスト対象にできます
  • 実行スナップショット(.vibe/run-snapshot.json):各実行でルートごとの成功・失敗を記録し、前回の実行との差分を取ります。snapshot_diff は newly_passing(修正)、newly_failing(リグレッション)、still_failing に加えて、追加および削除されたルートを示します
{
  "snapshot_diff": {
    "newly_passing": ["/login"],
    "newly_failing": ["/checkout"],
    "still_failing": [],
    "new_routes": ["/admin/users"],
    "removed_routes": []
  }
}

run_converge は同じ形式を返すため、エディターで繰り返し実行すると、直前に壊した箇所が強調表示されます。

npx vibe-testing@latest reset を実行して状態をリセットし、最初からやり直してください。


セッションの流れ

エディターに「ログインフローをテストして」と依頼すると、次のように動作します。

User: "Test the login flow"

AI calls:
  scan_codebase({ codebase_path: ".", url: "http://localhost:3000" })
    -> Finds /login route, LoginForm component, POST /api/auth/login endpoint
    -> Returns 8 generated test scenarios

  get_context({ feature: "login" })
    -> Returns src/app/login/page.tsx (has name="email", name="password" fields)
    -> Returns src/app/api/auth/login/route.ts (POST handler, returns { token })
    -> AI now knows the real selectors: [name='email'], [name='password']

  login({ email: "[email protected]", password: "pass123" })
    -> Opens Chromium, fills the form, clicks submit
    -> Returns: { success: true, final_url: "/dashboard", tokens_found: 2 }
    -> Returns screenshot of post-login dashboard

  execute_scenario({ scenario: { name: "Login with invalid password", ... } })
    -> Returns screenshot showing error state

  generate_report()
    -> Writes .vibe/report.html, opens in browser

AI reports: "Login works. Invalid password shows an error. All 3 login scenarios passed."

FAQ

vibe-testing は内部で LLM を使用しますか? いいえ。ヒューリスティックによる検証(URL の変更、トーストの検出、API エラー)を使用します。エディターのモデルが頭脳となり、スクリーンショットを見て次に何をテストするかを判断します。実行に API コストはかかりません。

explore_page と execute_scenario の違いは何ですか? explore_page は幅広く調査します。見つかったすべてのボタンと入力欄をクリックし、結果を報告します。execute_scenario は正確に実行します。具体的な手順を指定すると、そのとおりに実行します。ページに何があるかを調べるには explore_page を使い、その後、特定のフローをテストするには execute_scenario を使います。

get_context は何に使いますか? 機能の実際のソースコードを返すため、AI は #email-input のように推測するのではなく、[name='email'] を把握できます。特定の機能のテスト手順を書く前に、必ず呼び出してください。

クライアント側ルーティングを使用する SPA に対応していますか? はい。Playwright が実際のブラウザーを操作するため、クライアント側ルーティング(React Router、Vue Router など)も自然に動作します。

ログイン/認証に対応していますか? はい。login ツールは実際のブラウザーで認証情報を入力し、localStorage/cookies から認証トークンを取得して、認証が必要なテストでもセッションを維持します。認証情報は .vibe/memory/ に保存され、自動的に再利用されます。

「アカウントを削除」などの破壊的なボタンをクリックしますか? いいえ。vibe.config.json または VIBE.md に never_interact を設定して、危険な操作をブロックリストに登録できます。テキストまたはセレクターが一致するボタンは、探索中にスキップされます。

AI エディターなしでも使用できますか? はい。vibe-test run https://your-app.com で単独実行できます。スキャン、シナリオの生成と実行、HTML レポートの作成を行い、エディターは必要ありません。

ステージング環境をテストするにはどうすればよいですか? vibe.config.json の url にステージング URL を設定するか、CLI 引数として渡します:npx vibe-testing@latest run https://staging.myapp.com。

モノレポで動作しますか? はい。init は Turborepo/pnpm/yarn のワークスペースを検出し、フロントエンドアプリを自動的に見つけます。


要件

  • Node.js >= 20(テストスイートでは Node 20 以降が必要な vitest 4.x を使用します)
  • Playwright Chromium。init が対応するビルドをインストールします。直接インストールまたは修復するには:
    npx vibe-testing@latest install-browser
    

run と converge はプロジェクトのスキャン前にブラウザーを確認し、ブラウザーが見つからない場合は同じ復旧コマンドを表示します。

Docker

コンテナベースの MCP サーバーを優先する環境向けに、Node 20 と Chromium のイメージが含まれています:

docker build -t vibe-test .
# wire into your editor's MCP config:
# { "command": "docker", "args": ["run", "--rm", "-i", "vibe-test"] }

貢献

git clone https://github.com/AishwaryShrivastav/vibe-testing.git
cd vibe-testing
npm install
npx playwright install chromium
npm run build   # tsc -> dist/
npm run dev     # run CLI without building
npm run mcp     # run MCP server without building
npm test        # unit and isolated integration tests
VIBE_REAL_BROWSER=1 npm test  # also run real Chromium CLI/MCP regressions

バージョン履歴については、CHANGELOG.md を参照してください。バグ報告と機能リクエスト:GitHub issues。


ライセンス

MIT、Aishwary Shrivastav


リンク

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。