Cypressの仕様
Cypressでは、UserAgentや環境変数などの設定を、テストの実行中に変更することはできません。(https://docs.cypress.io/api/cypress-api/config.html#Not-all-config-values-can-be-changed-at-all-times)
そのため、PCとSPなどUserAgentに応じて異なるテストを実行したい場合、UserAgentごとにテストファイルを分けてテストを実行するなどの工夫を行う必要があります。
そのような時、環境変数でUserAgentや実行するテストファイルの設定を上書きして切り替えられるような仕組みを用意すると便利です。
cypress/plugins/index.js
設定の上書き処理は、cypress/plugins/index.js
に記述します。
module.exports = (on, config) => {
const configOverride = {};
if (config.env.device === 'sp') { // sp用の設定
configOverride.userAgent = '< SPテスト用のUserAgent >';
configOverride.testFiles = 'sp/**/*.*';
} else { // pc用の設定
configOverride.userAgent = '< PCテスト用のUserAgent >';
configOverride.testFiles = 'pc/**/*.*';
}
return { ...config, ...configOverride };
};
上記のように設定の上書き処理を追加してあげることで、
PC用のテストファイルをintegration/pc
配下に、
SP用のテストファイルをintegration/sp
配下にまとめておくだけ、
cypress run --env device=pc
でPCのテスト、
cypress run --env device=sp
でSPのテストを実行できるようになります。
また、同じようにして、環境変数でテストを実行するURLを変更することもできます。
module.exports = (on, config) => {
const configOverride = {};
if (config.env.env === 'dev') {
configOverride.baseUrl = '< 開発環境のURL >';
} else if (config.env.env === 'prod') {
configOverride.baseUrl = '< 本番環境のURL >';
}
return { ...config, ...configOverride };
};
cypress run --env env=dev
で開発環境でのテスト、
cypress run --env env=prod
で本番環境のテストを実行できるようになりました。
このような感じで、cypress/plugins/index.js
に、環境変数による設定の上書きをすることで、Cypressはとても便利になります。
皆さんもぜひ、cypress/plugins/index.js
を上手に活用して、Cypressをより便利にしていきましょう!!
参考
https://docs.cypress.io/api/cypress-api/config.html#Not-all-config-values-can-be-changed-at-all-times
https://github.com/cypress-io/cypress/issues/2100