ns-code-e2e-tests について
ns-code-e2e-testsは、既存または新規プロジェクトでCypressのE2Eテストを実装するスキルです。デバイス別のテスト構成とコマンド設計を定め、SDDの実行時にテストスイートを実行しない条件も示します。
主な機能
- 01独立したCypressプロジェクトの検出・初期化
- 02デバイスと機能ごとのテスト仕様の整理
- 03共通・デバイス別・ページ別コマンドの分離
- 04テストの調査と実装ルールの提示
- 05テストスイートを実行しない条件の明示
活用シーン
- 01E2E環境のないプロジェクトへのCypressテスト追加
- 02デスクトップ・タブレット・モバイル向けテストの整理
- 03SDDの実行引き継ぎでのテスト実装
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nextstage-brasil/ skills --skill ns-code-e2e-testsインストール後、Claude Code で/ns-code-e2e-testsを入力して読み込まれたか確認します。
同梱ファイルevals/evals.jsonreferences/e2e-architecture.md
詳細
E2E テストの作成
実行フェーズの Cypress 実装です。計画フェーズ:ns-pm-e2e-test-task-generator。
ハーネスの確認
{harness}/rules/e2e-tests-rules.mdc がある場合は読み込みます。構成とブートストラップの概要については references/e2e-architecture.md を参照してください。
フェーズ 0 — Cypress のルートを特定またはブートストラップする
スペックやコマンドのコードを書く前に、Cypress プロジェクトを特定するか、作成してください。
0.1 — 既存の E2E 環境を検出する(既存プロジェクト)
{product_root} を次の順序で検索します。
tests-e2e/cypress.config.tstestes-cypress/cypress.config.ts(旧名称)frontend/cypress.config.ts(旧配置)
cypress.config.ts を含むディレクトリを {e2e_root} として記録します。特に記載がない限り、以下のパスはすべて {e2e_root} からの相対パスです。
0.2 — 該当するものがない場合にブートストラップする(新規プロジェクト)
0.1 で一致するものがない場合、{product_root}/tests-e2e/ を独立した Node プロジェクトとして作成します。
| ルール | 詳細 |
|---|---|
| 場所 | {product_root}/tests-e2e/ のみ |
package.json | ここに配置します。Cypress を frontend/package.json に追加してはいけません |
| 構成 | references/e2e-architecture.md に従います(設定ファイル + 空の device/ フォルダー + support のインポート) |
cypress.config.ts | CYPRESS_BASE_URL から baseUrl を設定し、specPattern は cypress/e2e/**/*.cy.ts にします |
| スクリプト | tests-e2e/package.json に cypress:open と cypress:run を追加します |
次に、{e2e_root} = {product_root}/tests-e2e/ と設定します。
新規プロジェクトで禁止されていること: frontend/cypress/ 以下へのスキャフォールディング、依存関係のフロントエンドのロックファイルへのコピー、アプリのパッケージに Cypress がすでにインストールされていると想定すること。
0.3 — ブートストラップ後のドキュメント更新
{product_root}/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を確認します(Cypress のコードは書かずにfrontend/を読み取ります) - 既存のコマンド —
{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)は使用しません。インターセプトまたはアサーションのタイムアウトを使用します - RBAC:メニューが非表示であることと、直接 URL にアクセスした場合に拒否されることを確認します
- 認証:UI またはサポートセッション経由でログインします。テナントを考慮したフィクスチャを使用します
フェーズ 5 — 実行と報告
{e2e_root} から npm run cypress:run を実行します(または、そのプロダクトでドキュメント化されている Docker の同等コマンドを実行します)。必要に応じて ns-code-investigator を使って失敗を報告します。
SDD バージョンの実行: execution-handoff.md/
run-implementation の下で呼び出された場合、スペックの作成またはリファクタリングのみを行います。E2E スイートを実行してはいけません。
E2E はバージョン終了時に人間が実行します。
参考資料
| ファイル | 用途 |
|---|---|
references/e2e-architecture.md | ルートの構成、ブートストラップの構成、ルール |
ns-pm-e2e-test-task-generator | タスク契約の参照元 |
関連スキル
ns-pm-e2e-test-task-generator— testid コントラクトを含むタスクの計画ns-code-investigator— 失敗する E2E のデバッグns-gitlab-ci-generator— CI のcd tests-e2eと変更パス