Flutter で便利な Goldenテスト、これをGitHub Actions等のCIで実行すると、失敗してしまうことがあります。
ローカルの環境では成功するのに何故、、、?と頭を悩ましました。
この問題の解決法について解説します。
##課題##
Goldenテストがローカルの環境では成功するが、
GitHub Actions等のCIで実行すると失敗してしまう。
##解決法##
Goldenを生成したOSとCIで実行するOSを揃える。
Goldenを生成したPCのOSがMac OSの最新版ならば、
CIの実行環境のOSもMac OSの最新版にする。
##解説##
CIの失敗はオペレーションシステムによって、生成されるGolden(スクリーンショット)が微妙に異なることが原因で発生します。
こちら、公式で言及されています。
Golden tests may be executed locally on Linux, MacOS, and Windows platforms. All reference images can be found at Flutter Gold baselines. Some tests may have multiple golden masters for a given test, to account for rendering differences across platforms. The parameter set for each image is listed in each image digest to differentiate renderings.
また、同じMacでもOSのバージョン違いで失敗する場合があるようです。
参考
https://github.com/flutter/flutter/issues/56383
なので、CIの設定ファイルにて、実行するOSを合わせることで、
同じGoldenが生成され、テストが無事成功します。
##まとめ##
Goldenテストがローカルの環境では成功するが、
GitHub Actions等のCIで実行すると失敗してしまう場合、
Goldenを生成したOSとCIで実行するOSを揃えることで、想定通りの実行結果となります。
GitHub Actionsで指定するOSはLinuxが多いと思うので、
多くの人がハマってしまうのではないでしょうか。
ぜひこの方法で対策してみてください。
##参考##