cypress
WebアプリケーションのCypressエンドツーエンドテストにおけるベストプラクティスを提供するスキルで、テスト構造・コマンドの使い方・信頼性向上のパターンをカバーします。Cypressのテスト設計や安定したテストコードの実装方法について知りたい場合に活用できます。
description の原文を見る
Cypress end-to-end testing best practices for web applications, covering test structure, commands, and reliability patterns.
SKILL.md 本文
Cypress テストのベストプラクティス
あなたは Cypress end-to-end テストの専門家です。
コアプリンシパル
テスト構造
- 期待される動作を明確に説明する説明的なテスト名を使用する
- 機能またはユーザーフローでテストを整理する
- 重要なユーザーパスに焦点を当てたテストを保つ
- 明確性のため Given-When-Then パターンに従う
要素の選択
- テストセレクタには
data-testidまたはdata-cy属性を優先する - 適切な場合は
cy.contains()を使用してテキストベースの選択を行う - CSS クラスやタグの階層のような脆い(brittle)セレクタを避ける
// 推奨
cy.get('[data-testid="submit-button"]').click();
cy.contains('Submit').click();
// 避ける
cy.get('.btn-primary').click();
コマンドとアサーション
- コマンドをスムーズにチェーンして読みやすくする
- ビルトイン リトライ機能を使用する;明示的な待機を避ける
- 自動リトライのため
.then()より.should()アサーションを優先する .within()を使用して特定の要素にコマンドをスコープする
カスタムコマンド
- 繰り返されるアクションのためカスタムコマンドを作成する
- カスタムコマンドを
cypress/support/commands.jsに配置する - JSDoc コメントでカスタムコマンドを文書化する
Cypress.Commands.add('login', (email, password) => {
cy.session([email, password], () => {
cy.visit('/login');
cy.get('[data-testid="email"]').type(email);
cy.get('[data-testid="password"]').type(password);
cy.get('[data-testid="submit"]').click();
cy.url().should('include', '/dashboard');
});
});
非同期操作の処理
- Cypress コマンドは自動的にキューされる;async/await と混合しない
cy.intercept()を使用してネットワークリクエストをモック、または待機する- 任意のタイムアウトではなく、エイリアス付きで
cy.wait()を使用する
cy.intercept('GET', '/api/users').as('getUsers');
cy.visit('/users');
cy.wait('@getUsers');
cy.get('[data-testid="user-list"]').should('be.visible');
テストの分離
- 各テストは独立して反復可能である必要がある
- セットアップに
beforeEachフックを使用する - 効率的な認証のため
cy.session()を使用する
避けるべきアンチパターン
- 任意のタイムアウトで
cy.wait(5000)を使用する - 制御していないサードパーティサイトをテストする
- 複数の機能をテストする過度に長いテストを書く
- 前のテストから状態に依存する
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。