UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Cypress】E2Eテストを実施する

機能拡張を盛んに行った結果、予期せぬ不具合が頻発するようになった

事象分析したところ特定のUIパーツが表示されなくなってしまうバグが多かったため、リリース前にE2Eのリグレッションテストを実施することにした

Cypressの導入

E2EをするにあたってCypressというテストツールを導入する

Cypressで主要ページ数件のスナップショットを取得し、それを目視で確認することにする
※表示されていないことを確認したいUIパーツは大きなコンテンツなため、目視でも問題ないと判断した

変更前後の差分を検出するビジュアルリグレッションテストも検討したが、準備に時間がかかりそうだっため今回は行わないことにした

また、Cypressについては以前に調査したことがあり、ブラウザはChromeにしか対応していないが、発生していたバグはどのブラウザでも発生していたので問題ない

uga-box.hatenablog.com

Cypressでスクリーンショットを取得する

cypressをnpmでインストール

$ npm install cypress --save-dev

package.jsonに2つのscriptsを追加する

...
  "scripts": {
    ...
    "cy:open": "cypress open",
    "cy:run": "cypress run",
  }
...

とりあえず、npm run cy:openするとCypressのダッシュボードが開き、テストファイルがプロジェクト内に展開される

次に、cypress.jsonスクリーンショットを取得するページのURLをbaseURLに設定する
※cypress.jsonは上のcy:openをしたときに自動で作成されている

{
  "baseUrl": "https://my-app.com/",
}

そして、cypress/integrationに適当なファイル(sample.spec.js)を作成し、テストを書く
cypress/integrationディレクトリも上のcy:openをしたときに自動で作成されている

sample.spec.js

describe("スクリーンショットサンプル", () => {
  it("トップページ", () => {
    cy.visit("/");
    cy.screenshot({
      capture: "fullPage"
    });
  });
});

Cypress.screenshot()には引数にオプションを渡すことができて、フルページキャプチャが欲しかったので、capture: "fullPage"を指定した

https://docs.cypress.io/api/commands/screenshot.html#Arguments

最後に、npm run cy:runを実行するとcypress/screenshots配下にスナップショットが保存されている