ns-e2e-tests について
ns-e2e-testsは、WebアプリケーションのCypress E2Eテストを実装するスキルです。既存プロジェクトの検出や独立したテスト環境の構築から、コマンドとデバイス別仕様の整理、テスト実行までを案内します。
主な機能
- 01Cypressプロジェクトの検出と構築
- 02動作とデバイス別のコマンド整理
- 03デバイス別E2E仕様の作成
- 04サードパーティ通信の既定スタブ化
- 05テスト実行と失敗の報告
活用シーン
- 01既存アプリへのCypress E2Eテスト追加
- 02新規アプリ用の独立E2E環境構築
- 03デスクトップ、タブレット、モバイルのフロー検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nextstage-brasil/ skills --skill ns-e2e-testsインストール後、Claude Code で/ns-e2e-testsを入力して読み込まれたか確認します。
同梱ファイルevals/evals.jsonreferences/e2e-architecture.md
詳細
E2E テストの作成
実行フェーズの Cypress 実装です。計画フェーズについては、ns-spec-driven/references/e2e-test-task-generator.mdを参照してください。
セッションの開始
.nextstage-harness/rules/e2e-tests-rules.mdcが存在する場合は読み込みます。ディレクトリ構成とブートストラップの概要については、references/e2e-architecture.mdを参照してください。
フェーズ 0 — Cypress ルートの確認またはブートストラップ
仕様コードやコマンドコードを書く前に、Cypress プロジェクトを見つけるか、作成してください。
0.1 — 既存の E2E の検出(既存プロジェクト)
リポジトリ内を次の順序で検索します。
tests-e2e/cypress.config.tstestes-cypress/cypress.config.ts(旧名称)frontend/cypress.config.ts(旧・同居構成)
cypress.config.tsを含むディレクトリを**{e2e_root}**として記録してください。特記がない限り、以下のすべてのパスは{e2e_root}からの相対パスです。
0.2 — 何も見つからない場合のブートストラップ(新規プロジェクト)
0.1 で一致するものがない場合、スタンドアロンの Node プロジェクトとして**tests-e2e/**を作成します。
| ルール | 詳細 |
|---|---|
| 場所 | tests-e2e/のみ |
package.json | ここに配置 — frontend/package.jsonに Cypress を追加しないでください |
| ツリー | references/e2e-architecture.mdに従います(設定+空のdevice/フォルダー+support imports) |
cypress.config.ts | CYPRESS_BASE_URLからのbaseUrl、specPatternはcypress/e2e/**/*.cy.ts |
| スクリプト | tests-e2e/package.jsonにcypress:open、cypress:run |
その後、{e2e_root} = tests-e2e/と設定します。
新規プロジェクトで禁止されていること:frontend/cypress/以下へのスキャフォールディング、依存関係の frontend のロックファイルへのコピー、アプリのパッケージに Cypress がすでにインストールされていると想定すること。
0.3 — ブートストラップ後のドキュメント更新
docs/context/stack-confirmed.mdまたはarchitecture-rules.mdが存在する場合、E2E の行を追加または更新してください。場所はtests-e2e/、実行コマンドはcd tests-e2e && npm run cypress:run(またはプロジェクトの Docker 相当のコマンド)です。
{e2e_root}が確定し、cypress.config.tsを読み取れる状態になるまで、フェーズ 1 に進まないでください。
フェーズ 1 — 調査(機能コードを書く前)
- テスト対象のアプリ — ルート、フォーム、API の使用状況、既存の
data-testid(frontend/を読み取り、そこに Cypress のコードを書かないでください) - 既存のコマンド —
{e2e_root}/cypress/support/commands/内をすべて読み取ります。重複させないでください - 設定 —
{e2e_root}/cypress.config.tsのbaseUrl、環境変数(CYPRESS_BASE_URL、CYPRESS_API_URL)
フェーズ 2 — まずコマンドのアーキテクチャを整える
{e2e_root}/cypress/support/commands/
shared/[feature].commands.ts # business actions — all devices
pages/[feature].commands.ts # page structure
device/mobile|tablet|desktop.commands.ts
| 振る舞い | 場所 |
|---|---|
| すべてのデバイスで共通 | shared/ |
| デバイス専用 | device/ |
| ページの DOM 構造 | pages/ |
新しいコマンドファイルを{e2e_root}/cypress/support/e2e.tsに登録します。
仕様:describe/it、cy.visit()、コマンド、アサーションを使用します — 仕様内に DOM ロジックを記述しないでください。
フェーズ 3 — 仕様の配置
{e2e_root}/cypress/e2e/device/
desktop/[feature]/[feature]-successful-flows.cy.ts
tablet/...
mobile/...
beforeEach内でビューポートを設定します。
- デスクトップ:1280×720
- タブレット:768×1024
- モバイル:375×812
禁止事項:device/プレフィックスを付けずに、cypress/e2e/直下へ仕様を配置すること。
フェーズ 4 — 実装
- フロントエンドのタスク契約にある
data-testidを使用します — 独自に作成しないでください - 固定の
cy.wait(N)は使用しません — intercept またはアサーションのタイムアウトを使用してください - サードパーティへの HTTP/API 呼び出しはデフォルトでスタブ化します(intercepts/fixtures)。実際のサードパーティフローはオプトインのプロジェクト/タグ(ライブティア)にし、人間から依頼がない限り、デフォルトの
cypress:run/CIから除外してください - RBAC:メニューが非表示であることと、直接 URL によるアクセスが拒否されることを確認します
- 認証:UI 経由でログインするか、サポートセッションを使用します。テナント対応の fixture を使用します
フェーズ 5 — 実行と報告
{e2e_root}からnpm run cypress:runを実行します(または、製品向けにドキュメント化された Docker 相当のコマンドを使用します)。必要に応じてns-investigatorで失敗を報告します。
SDD バージョンの実行:execution-handoff.md/run-implementation経由で呼び出された場合は、仕様の作成またはリファクタリングのみを行い、E2E スイートを実行しないでください。人間がバージョンの最後に E2E を実行します。
参考資料
| ファイル | 用途 |
|---|---|
references/e2e-architecture.md | ルートのディレクトリ構成、ブートストラップツリー、ルール |
../ns-spec-driven/references/e2e-test-task-generator.md | タスク契約のソース |
関連スキル
ns-spec-drivenreferences/e2e-test-task-generator.md— testid コントラクトを使ったタスクの計画ns-investigator— 失敗する E2E のデバッグns-gitlab-ci-generator— CI のcd tests-e2eと変更パス