Skip to main content
Glama

TestTrout

AI製アプリのためのテストアシスタント。

アプリとして実行するか、MCP経由でコーディングエージェントに渡すか。 どちらの方法でも、あなたのアプリがこれまで持っていなかったテストを作成し、それらが壊れたときに知らせてくれます。

License Python Status


マスは指標種です。清潔で酸素が豊富な水にしか生息しません——川でマスを見つけたら、自分で水質を検査しなくても、その水が健康だとわかります。

優れたテストスイートとは、まさにそういうものです。雑務ではなく、ひと目で読み取れるシグナルなのです。


問題

コーディングエージェントは速く成果を出します。しかし、静かに物事を壊すこともあります。そして、彼らが作るアプリ——Lovable、v0、Bolt、Vercel上の手書きReact——には、ほぼ例外なくテストがありません。そのため、開発ループは、コードを書いた当の本人からの「良さそうに見える」という言葉で終わってしまいます。

TestTroutはそのループを閉じます。リポジトリを読み、実行中のデプロイメントに接続し、何が未テストで、どの順序で重要かを把握し、本物のテストを作成し、実行し、実際に行動に移せる結果を報告します。

Related MCP server: Lastest

起動方法

pip install testtrout
trout up

これだけで、ストレージ、バックグラウンドワーカー、そしてlocalhost:7411のインターフェースがすべて起動します。Dockerもデーモンも、インストールするデータベースも不要です——ストレージは~/.testtrout配下のSQLiteで、ワーカーはプロセス内で動作します。

次に、インターフェースまたはターミナルからリポジトリをリンクします:

trout link ~/code/my-app          # a folder you already have
trout link --github owner/name    # cloned with your GitHub token

ローカルフォルダをリンクしても、そのフォルダが変更されることは決してありません。スキャンが自動的に開始され、Setupタブにすべての設定があります: デプロイメント、Supabase、テストアカウント、モデルプロバイダー。

これを安全かつ有用にしているのは、次の2つの点です:

アプリが必要とする認証情報を教えてくれます——ソースコードを読むことで、どの変数にアクセスしているか、それぞれが何に使われる可能性が高いか、そしてそれが現れる行を発見します。コードがすでに明示していることを、改めて導出する必要はありません。

認証情報が部分的なら、テストスイートも部分的です。 URLだけあれば、APIテストをプローブして実行できます。anonキーと2つ目のアカウントを追加すれば、認可テストが可能になります。ブロックされた各機能は、次に必要な単一のものを名前で示します。「適切に設定してください」とは決して言いません。

シークレット値はgitignoreされた.envに書き込まれます。コミットされる設定にはenv:NAME参照のみが保持され、設定フィールドにリテラルのシークレットを入力すると拒否されます。

またはコーディングエージェントに任せる

アプリは1つの入り口であり、唯一の方法ではありません。アプリが行うすべてのことは、型付きMCPツールおよびCLIコマンドとして利用できるため、エディタを離れたくない人も離れる必要がありません:

pip install 'testtrout[mcp]'
trout mcp /path/to/your/project

エージェントを.claude/skills/のスキルに向けるか、次のように指示します:

TestTrout MCPサーバーを使用してください。リポジトリをスキャンし、重要度順に未テストのものを表示し、上位5件のテストをドラフトして実行してください。

1つのプロジェクトにバインドされた13のツールにより、エージェントが誤ったリポジトリに対して操作することはありません:

scan surfaces

コードベースを理解します。APIキーもネットワークも不要です。

probe

デプロイされたアプリが実際に何をするかを、実際のブラウザで確認します。

intent gaps

未テストのものをランク付けし、その理由を説明します。

propose approve generate

ドラフト、レビュー、実際のテストファイルへのコンパイル。

run certify report

実行、決定性の証明、エビデンスの読み取り。

doctor

何が不足しているか、そしてそれをどう修正するか。

さらに、trout://surfacestrout://intenttrout://configtrout://scenariosをリソースとして提供するため、大量の状態がエージェントのコンテキストウィンドウを圧迫することはありません。

理解できるもの

trout scanは完全に決定論的です——モデルもネットワークも不要で、クローンしたばかりのリポジトリでも安全です。典型的なSupabaseアプリでは、以下を見つけ出します:

Surface

Example

画面

/orders/:idOrderDetail、およびそれが到達するデータ

データ操作

supabase.from('orders').delete().eq('id', …)

RLSポリシー

Users manage own orders — テスト可能な認可クレーム

サーバーアクション

'use server'関数 — ヘルパーのように見えるエンドポイント

ルートハンドラー

app/api/checkout/route.tsPOST

サードパーティ

Stripe、Resend — 置換境界

スキーマ

テーブル、カラム、外部キー、RLSステータス

また、行レベルセキュリティなしでブラウザコードからテーブルに書き込みが行われている場合も通知します——つまり、anonキーを通じて誰でも書き込める状態です。これは通常、新しい発見です。

テストが信頼に値する理由

PRごとの推測ではなく、ベースラインを構築します。 変更したばかりのコードから導出されたテストは、構造上、新しい動作が正しいことを主張するだけです——リグレッションを検出することはできません。TestTroutはまず動作しているデプロイメントに対してスイートを認定するため、失敗には意味があります。

決定論的なコア、エッジにモデル。 スキャン、ランキング、実行、失敗の分類は決してモデルを呼び出しません。モデルは、意図の解釈、文言の調整、およびアサートする観測要素の選択のみを行います。すべてのランキングは、名前付きの貢献の合計です:

critical  authorization  A user cannot read another user's rows in payments   100
  · critical surface
  · policy: exists (select 1 from orders o where o.id = payments.order_id …)

すべてのアサーションには出自があります。 ポリシーからのderived、実際のブラウザでのobserved、またはモデルによるinferred——そしてinferred単独では、何かをブロックすることは決してできません。

失敗は報告される前に分類されます。 製品シグナルとなるのはassertion_failureのみです。認証失敗、到達不能なデータベース、ブロックされたサードパーティ呼び出しはハーネスに関するものであり、決定的でない実行がパスに昇格することは決してありません。

すべてターミナルから

trout scan          # understand the code
trout init          # connect a deployment
trout gaps          # what's missing, ranked, with reasons
trout run           # execute, with evidence behind every result

すべてのコマンドが--jsonをサポートしています。完全なチュートリアルはdocs/setup.mdにあります。

保存方法

テストスイートはリポジトリ内に残り、コミットされ、レビュー可能です:

.trout/scenarios/*.yaml    what each test asserts, in plain language
.trout/config.yaml         deployments and env: references, never secrets
tests/trout/               generated Playwright and Vitest files

実行履歴、経時的なカバレッジ、ジョブキューは~/.testtrout配下のSQLiteに保存されます。この分割は意図的です: スイートはプルリクエストでレビューできるようコードの隣に置かれ、ファイルでは答えられない質問——このテストはフレーキーになっていないか、カバレッジは上がっているか——はデータベースに置かれます。

オプションのWebビュー

trout web

ひと目でわかるカバレッジ、ランク付けされたギャップリスト、シナリオレビュー、エビデンス付きの実行履歴、ライブログ。CLIと同じ.trout/ファイルを使用——データベースなし、ホスティングなし、ループバックのみ。完全にオプションです。CLIとMCPは単独で完結しています。

安全性

このツールはデータベース認証情報を必要とし、デプロイメントを操作できるため、保証は文書化ではなくコードで強制されています:

  • 本番環境はデフォルトで読み取り専用です。 変更を伴うリクエストは、エントリポイントが明示的にdisposableとマークされていない限り、ネットワーク層でブロックされます。このガードはナビゲーションの下にあります。なぜなら「ページを読み込むだけが読み取り専用」というのは誤りだからです——これらのアプリの多くはマウント時に書き込みを行います。エージェントも、Webクリックも、その設定を変更できません。

  • サードパーティはインターセプトされます。 テスト実行でカードに請求したり、顧客にメールを送信したりすることはできません。一致しない送信リクエストは明示的に失敗します。何も一致しないモックが静かに成功するのは、何もテストせずにスイートがグリーンを報告する方法です。

  • シークレットはコミットされたファイルに残りません。 .trout/config.yamlにはenv:参照のみが保持されます。値はgitignoreされた.envに置かれます。

  • ホスティングはありません。 選択したモデルプロバイダーへの呼び出し以外、何もマシンから出て行きません。テレメトリもありません。

モデルプロバイダー

Anthropic、OpenAI、またはKimi——あるいはbase_urlによる任意のOpenAI互換エンドポイント。

model:
  provider: anthropic
  api_key: env:ANTHROPIC_API_KEY

分析は決してモデルを呼び出さないため、trout scantrout gapstrout runはすべてキーなしで動作します。

サポート対象スタック

React + Vite (Lovable、v0、Bolt) とNext.js App Router、TypeScript、Supabaseを使用し、HTTPで到達可能な任意の場所にデプロイされています。認証はSupabase、Clerk、またはNextAuth経由。

意図的に狭くしています。1つのスタックでの深さは、多くのスタックでの浅いカバレッジに勝ります——そしてこれらのコードベースは十分に規則的であるため、静的解析がそれらに対して真に正確です。他のスタックはアダプター1つで対応できます: docs/adapters.mdを参照してください。

ロードマップ

リポジトリ分析、デプロイメントプロービング、ギャップランキング

シナリオ作成、生成、実行、認定

MCPサーバー、CLI、ストレージとワーカーを備えたローカルアプリ

変更ベースのテスト選択、ベースブランチ差分

マルチリポジトリ: ローカルフォルダのリンクまたはGitHubトークンでのクローン

インターフェースまたはCLIからの完全な設定、認証情報の検出付き

🔜

GitHubプルリクエストチェック

🔜

観測カバレッジインデックス (現在の選択は宣言カバレッジを使用)

コントリビューション

フレームワーク、認証プロバイダー、またはテストランナーを追加するには、1つのプロトコルを実装してエントリポイントを登録するだけです——フォークは不要です。CONTRIBUTING.mddocs/adapters.mdを参照してください。

完全なテストスイートはAPIキーなしでオフラインで実行されます。これは意図的であり、維持する価値があります。

ライセンス

Apache 2.0

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DrDroidLab/TestTrout'

If you have feedback or need assistance with the MCP directory API, please join our Discord server