ElectronのテストをPlaywrightで行う時Linux環境だとMissing X server or $DISPLAYで動かなかったのを解決
問題
microsoft/playwright: Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.を使って、 Electronの自動テストを行う計画を立てました。
前はSpectronで行ってたのがElectronをちゃんとバージョンアップしたら爆散してしまいました。 Spectron 非推奨通知 | Electron
とりあえず最初は起動することだけを確認すれば良いので、そのように他の人に指示をしました。
しかしコマンドによって動いたり動かなかったりするらしいので私が調査することにしました。
自分の環境の場合は、どのコマンドを使っても動きませんでした。
エラー内容はこんな感じで、
[err] [295:0730/134029.164788:ERROR:ozone_platform_x11.cc(248)] Missing X server or $DISPLAY
[err] [295:0730/134029.164838:ERROR:env.cc(226)] The platform failed to initialize. Exiting.
問題のエラーになる場所はここ。
const electronApp = await electron.launch({
args: ['app/main.js'],
env: { NODE_ENV: 'development' },
});
Xを認識してないのか。
[BUG] electron.launch: Process failed to launch on Ubuntu github action · Issue #11932 · microsoft/playwright
で似たような状況になることは分かったので、ここの対策を試してみます。
xvfb-run
を試しても問題になるのは同じ。
とりあえず問題を切り分けするためにWindowsでテスト起動してみたら普通に動きますね。
CircleCI Dockerでは公式イメージのmcr.microsoft.com/playwright:v1.24.2-focal
を使ってるのに動きません。
解決
勘が働いてenvを書き換えました。
const electronApp = await electron.launch({
args: ['app/main.js'],
env: { ...process.env, NODE_ENV: 'development' },
});
動きました。
Xの情報を環境変数で渡しているのでNODE_ENV
だけにしたらリセットされてしまい動きませんね。中々気が付きませんでした。