gotohayato.com

月(ダークモード)
太陽(ライトモード)

Cypress のテストで Basic 認証をパスする方法

JavaScript

Node.js のテスティングライブラリ Cypress のテストで Basic 認証をパスする方法についてです。

確認時のバージョン

動作確認に使用したバージョンは次のとおりです:

  • Node.js 16.5.0
  • Cypress 8.0.0

1. とりあえず Basic 認証をパスする

とりあえず Basic 認証をパスしたい場合は cy.visit() の第 2 引数 options を使用します。

cy.visit(url, options)
  • auth.username: ユーザー名
  • auth.password: パスワード

cypress/integration/basic-auth.js:

it(`Basic 認証をパスできることを確認する`, () => {
const url = 'https://example.com'
cy.visit(url, {
auth: {
username: `ユーザー名`,
password: `パスワード`,
},
})
})

変数 url には対象ページの URL を渡します。

参考:

  • visit | Cypress Documentation

2. 認証情報を設定ファイルで指定する

Basic 認証のユーザー名・パスワードをテストコードに直接書きたくない場合は、ユーザー名・パスワードを設定ファイルの env にセットしておきテストコードではそれらを Cypress.env() で読み込むようにするとよいです。

cypress.staging.json:

{
"baseUrl": "https://example.com",
"env": {
"AUTH_USERNAME": "ユーザー名",
"AUTH_PASSWORD": "パスワード"
}
}

cypress/integration/basic-auth-with-env-vars.js:

it(`Basic 認証をパスできることを確認する`, () => {
const username = Cypress.env('AUTH_USERNAME')
const password = Cypress.env('AUTH_PASSWORD')
const url = '/'
if (username && password) {
cy.visit(url, {
auth: {
username,
password,
},
})
} else {
cy.visit(url)
}
})

ここでは変数名を AUTH_USERNAME AUTH_PASSWORD としていますが、これらでないといけないわけではありません。 各自がわかりやすい変数名にすれば OK です。

利用する設定ファイルの指定は cypress コマンドのオプション --config-file でできます。 何も指定しなかったときは cypress.json が使用されます。

cypress open --config-file=cypress.staging.json

参考:

3. cy.visit() で自動的に Basic 認証をパスする

cy.visit() を実行すれば自動的に Basic 認証をパスするようにしたい場合は、 Cypress のコマンド上書き機能が有用です。

cypress/support/commands.js:

// `cy.visit()` で Basic Auth を自動でサポートする
Cypress.Commands.overwrite('visit', (orig, url, options) => {
const username = Cypress.env('AUTH_USERNAME')
const password = Cypress.env('AUTH_PASSWORD')
if (username && password) {
orig(url, {
auth: {
username,
password,
},
...options,
})
} else {
orig(url, options)
}
})

このようにしておくと、設定ファイルで Basic 認証の認証情報が指定されている場合は認証用のヘッダーを追加し、そうでない場合はヘッダーを追加しないというふるまいになります。 これは Basic 認証ありの環境となしの環境を頻繁に切り替えてテストしたい場合などに便利です。

参考:


hg

後藤隼人 (ごとうはやと)

ウェブ制作・開発やマーケティング、プロジェクト支援などをしています。

githubpython

© 2021 gotohayato.com
サイトについてタグアーカイブメッセージを送る