{
  "$type": "site.standard.document",
  "canonicalUrl": "https://blog.nove-b.dev//posts/angular-playwright-typescript-e2e-testing",
  "path": "/posts/angular-playwright-typescript-e2e-testing",
  "publishedAt": "2025-01-19T00:00:00.000Z",
  "site": "at://did:plc:2atly2y5kfyjcj5zap6pv4wd/site.standard.publication/3mmxeqr2tcb2k",
  "tags": [
    "Angular",
    "Playwright",
    "TypeScript",
    "E2E"
  ],
  "textContent": "E2E(イーツーイー)\n\n英語の「End-to-End(エンドツーエンド)」の略で、「端から端まで」を意味する。\nE2Eテストはユーザーの視点からアプリケーション全体の動作を確認し、機能の一貫性と信頼性を保証する手法すること。\n\nE2Eテストの自動化\n\n自動化するツールはいくつかあり、それぞれメリットデメリットがあるっぽい。下記は [ブラウザ拡張のE2Eテストを検討してみた(Playwright、Puppeteer、Cypress)とChatGPTの情報を混ぜ合わせた、メリットデメリット表。\n\n| 項目                      | Playwright                                       | Puppeteer                                   | Cypress                         | Selenium                          |\n| ------------------------- | ------------------------------------------------ | ------------------------------------------- | ------------------------------- | --------------------------------- |\n| サポートブラウザ      | Chromium, Chrome, Edge, Firefox, Webkit (Safari) | Chrome, Firefox                             | Chrome, Edge, Firefox, Electron | Chrome, Edge, Firefox, Safari, IE |\n| テストツールの有無    | ✅                                                | 🟡 (Jest を使えば可能)                       | ✅                               | 🟡 (外部ライブラリが必要)          |\n| 複数タブ / ウィンドウ | ✅                                                | ✅                                           | 🛑                               | ✅                                 |\n| Shadow DOM            | ✅                                                | 🟡 (aria または pierce セレクタを使えば可能) | ✅                               | 🟡 (限定的なサポート)              |\n| ブラウザ拡張          | ✅                                                | ✅                                           | 🟡                               | 🟡 (一部サポート)                  |\n| 要素の特定            | 🟡                                                | ✅                                           | 🟡                               | ✅                                 |\n| 要素の自動待機        | ✅                                                | 🟡                                           | ✅                               | 🛑 (手動で記述が必要)              |\n| スクリーンショット    | ✅                                                | ✅                                           | ✅                               | ✅                                 |\n| 動画                  | ✅                                                | 🛑                                           | ✅                               | 🛑                                 |\n| 実行速度              | ✅                                                | ✅                                           | ✅                               | 🟡 (ブラウザ依存でやや遅い)        |\n\nこれだけ見るとPlaywrightが有望な気がする。気になるのは要素の特定なので調べてみた結果、PuppeteerとCypressはjQuery、javascriptでの記述で取得できるけど、Playwrightは独特な記法になるということだったので、特段問題なさそうだった。\n\nPlaywrightをインストールする\n\n長いプロジェクトでnodeのバージョンがv16.13.2だったので、\n\nしっかり怒られた。\n\nこれを機にnodeのバージョンを上げることにする。\n\n色々な依存関係を解消しつつ、最新LTSまで上げた。\n\nnode_modulesを最新化し、\n\nPlaywrightを初期化する。大量のエラーが吐き出され、TLS/SSL 証明書の検証に失敗した。\n\nを実行する。\n\nNODE_TLS_REJECT_UNAUTHORIZEDは、Node.jsが\nHTTPS通信を行う際に使用する環境変数で、0にすると、サーバー証明書の有効性が検証されなくなる。\n\nChromium、Firefox、Webkit、FFMPEGがインストール完了した。\n\nという警告が出ていたので、\n\nでサーバー証明書を再度有効にした。\n\nPlaywrightのテストファイルを実行まで\n\nテストファイルの作成\n\ntests/にテストファイルを作成する。\n\nトライする\n\n上記をnpx playwright testで実行したところ、\n\nというエラーが大量にでた。どうやら、標準のユニットテストと混合しているらしい。\n\nエラーと格闘し成功まで\n\ntests/以下に置いていることが影響している気がしたので、tests/e2e以下にファイルを置いて再実行したところ、何も変わらない。\n\n色々調べてみた感じ、playwright.config.tsが不足しているようだったので、\n\nルートに追加したところ、テストを通すことができた。そしてレポートのHTMLが作成されるので、結果を見ることができる。",
  "title": "AngularプロジェクトでPlaywrightを導入しTypeScriptで自動E2Eテストを実行する"
}