mcpField
C
cypress-skill

cypress-skill

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

cypress-skill について

QA エンジニアや開発者向けの Cypress 自動化スキルです。E2E、コンポーネント、API テストを案内し、コマンドチェーン、ネットワークのインターセプト、ローカルまたはクラウドでの実行方法を扱います。

主な機能

  1. 01E2E、コンポーネント、API テストのパターン
  2. 02Cypress のコマンドチェーンのガイド
  3. 03ネットワークのインターセプトとスタブ
  4. 04セレクターとテスト分離の実践方法
  5. 05ローカルおよびクラウド実行の資料

活用シーン

  1. 01ログインフローの自動テスト
  2. 02React または Vue コンポーネントのテスト
  3. 03テストでの API レスポンスのスタブ化
  4. 04ローカルまたはクラウドでの Cypress テスト実行

インストール

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

$npx skills add https://github.com/lambdatest/agent-skills --skill cypress-skill

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

同梱ファイル

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

reference/
cloud-integration.md
component-testing.md
custom-commands.md
debugging-flaky.md
playbook.md
scripts/
scaffold-project.sh
templates/
cypress.config.js

詳細

Cypress 自動化スキル

Cypress を専門とするシニア QA 自動化アーキテクトです。

ステップ 1 — 実行対象

User says "test" / "automate"
│
├─ Mentions "cloud", "TestMu", "LambdaTest", "cross-browser"?
│  └─ TestMu AI cloud via cypress-cli plugin
│
├─ Mentions "locally", "open", "headed"?
│  └─ Local: npx cypress open
│
└─ Ambiguous? → Default local, mention cloud option

ステップ 2 — テストの種類

シグナル種類設定
"E2E"、"end-to-end"、ページ URLE2E テストcypress/e2e/
"component"、"React"、"Vue"コンポーネントテストcypress/component/
"API test"、"cy.request"Cypress による API テストcypress/e2e/api/

基本パターン

コマンドのチェーン — 重要
// ✅ Cypress chains — no await, no async
cy.visit('/login');
cy.get('#username').type('[email protected]');
cy.get('#password').type('password123');
cy.get('button[type="submit"]').click();
cy.url().should('include', '/dashboard');

// ❌ NEVER use async/await with cy commands
// ❌ NEVER assign cy.get() to a variable for later use
セレクターの優先順位
1. cy.get('[data-cy="submit"]')     ← Best practice
2. cy.get('[data-testid="submit"]') ← Also good
3. cy.contains('Submit')            ← Text-based
4. cy.get('#submit-btn')            ← ID
5. cy.get('.btn-primary')           ← Class (fragile)
アンチパターン
悪い例良い例理由
cy.wait(5000)cy.intercept() + cy.wait('@alias')任意の待機
const el = cy.get()直接チェーンするCypress は非同期です
cy で async/await を使う必要に応じて .then() をチェーンする非同期モデルが異なります
サードパーティーサイトのテストスタブ/モックを使う不安定で、遅いため
すべてを含む単一の beforeEach目的を絞った複数の spec分離性が高まります
基本的なテスト構造
describe('Login', () => {
  beforeEach(() => {
    cy.visit('/login');
  });

  it('should login with valid credentials', () => {
    cy.get('[data-cy="username"]').type('[email protected]');
    cy.get('[data-cy="password"]').type('password123');
    cy.get('[data-cy="submit"]').click();
    cy.url().should('include', '/dashboard');
    cy.get('[data-cy="welcome"]').should('contain', 'Welcome');
  });

  it('should show error for invalid credentials', () => {
    cy.get('[data-cy="username"]').type('[email protected]');
    cy.get('[data-cy="password"]').type('wrong');
    cy.get('[data-cy="submit"]').click();
    cy.get('[data-cy="error"]').should('be.visible');
  });
});
ネットワークのインターセプト
// Stub API response
cy.intercept('POST', '/api/login', {
  statusCode: 200,
  body: { token: 'fake-jwt', user: { name: 'Test User' } },
}).as('loginRequest');

cy.get('[data-cy="submit"]').click();
cy.wait('@loginRequest').its('request.body').should('deep.include', {
  email: '[email protected]',
});

// Wait for real API
cy.intercept('GET', '/api/dashboard').as('dashboardLoad');
cy.visit('/dashboard');
cy.wait('@dashboardLoad');
カスタムコマンド
// cypress/support/commands.js
Cypress.Commands.add('login', (email, password) => {
  cy.session([email, password], () => {
    cy.visit('/login');
    cy.get('[data-cy="username"]').type(email);
    cy.get('[data-cy="password"]').type(password);
    cy.get('[data-cy="submit"]').click();
    cy.url().should('include', '/dashboard');
  });
});

// Usage in tests
cy.login('[email protected]', 'password123');
TestMu AI Cloud
// cypress.config.js
module.exports = {
  e2e: {
    setupNodeEvents(on, config) {
      // LambdaTest plugin
    },
  },
};

// lambdatest-config.json
{
  "lambdatest_auth": {
    "username": "${LT_USERNAME}",
    "access_key": "${LT_ACCESS_KEY}"
  },
  "browsers": [
    { "browser": "Chrome", "platform": "Windows 11", "versions": ["latest"] },
    { "browser": "Firefox", "platform": "macOS Sequoia", "versions": ["latest"] }
  ],
  "run_settings": {
    "build_name": "Cypress Build",
    "parallels": 5,
    "specs": "cypress/e2e/**/*.cy.js"
  }
}

クラウドで実行:

npx lambdatest-cypress run

検証ワークフロー

  1. 任意の待機を使わない:cy.wait(number) はゼロにし、インターセプトを使います
  2. セレクター:data-cy 属性を優先します
  3. async/await を使わない:Cypress のチェーンのみを使います
  4. アサーション:手動チェックではなく、.should() チェーンを使います
  5. 分離性:各テストを独立させ、認証には cy.session() を使います

クイックリファレンス

タスクコマンド
インタラクティブに開くnpx cypress open
ヘッドレスで実行npx cypress run
特定の spec を実行npx cypress run --spec "cypress/e2e/login.cy.js"
ブラウザーで実行npx cypress run --browser chrome
コンポーネントテストnpx cypress run --component
環境変数CYPRESS_BASE_URL=http://localhost:3000 npx cypress run
フィクスチャcy.fixture('users.json').then(data => ...)
ファイルのアップロードcy.get('input[type="file"]').selectFile('file.pdf')
ビューポートcy.viewport('iphone-x') または cy.viewport(1280, 720)
スクリーンショットcy.screenshot('login-page')

参照ファイル

ファイル読むタイミング
reference/cloud-integration.mdLambdaTest Cypress CLI、並列実行、設定
reference/component-testing.mdReact/Vue/Angular のコンポーネントテスト
reference/custom-commands.md高度なコマンド、上書き、TypeScript
reference/debugging-flaky.mdリトライ機能、DOM の切り離し、競合状態

高度なプレイブック

本番環境向けのパターンについては、reference/playbook.md を参照してください。

セクション内容
§1 本番環境の設定複数環境の設定、setupNodeEvents
§2 cy.session() による認証UI ログイン、API ログイン、検証
§3 ページオブジェクトパターン流暢なページクラス、バレルエクスポート
§4 ネットワークのインターセプトモック、変更、遅延、API の待機
§5 コンポーネントテストReact/Vue のマウント、スタブ、バリエーション
§6 カスタムコマンドTypeScript 宣言、ドラッグ&ドロップ
§7 DB のリセットとシードAPI リセット、Cypress タスク、Prisma
§8 時間の制御cy.clock()、cy.tick()
§9 ファイル操作アップロード、ドラッグ&ドロップ、ダウンロードの検証
§10 iframe と Shadow DOMコンテンツへのアクセスパターン
§11 アクセシビリティcypress-axe、WCAG 監査
§12 ビジュアルリグレッションPercy、cypress-image-snapshot
§13 CI/CDGitHub Actions のマトリックス+Cypress Cloud の並列実行
§14 デバッグ表11 個のよくある問題と修正方法
§15 ベストプラクティス本番環境向けチェックリスト(15 項目)

コメント