📝

Flutterで複数解像度のGoldenTestを同時実行してみた

2021/10/20に公開

今回は複数解像度(複数端末)を同時にテストする方法を紹介します。

GoldenTestなにそれって方は前回の記事を参考にしてください。
https://zenn.dev/matsumaru/articles/c2bf8ec468cff8

やりたいこと

firstPage_masterImage

画像のように、色んなサイズのデバイスをまとめてスクリーンショット化してくれるので見た目の部分の確認もできるし、もちろんコードの中身を変更した時にUIが変わっていないかテストもできます。

けっこう簡単なので使ってみるのオススメです。

前提条件

今回もgolden_toolkitを使います。これからやることも公式サイトに書いてあります。

ライブラリの導入は前回の記事に書いたので省きます。

ソースコード

一応Githubはあげておきましたので、詳細気になる方は参考にしてください。
https://github.com/MatsumaruTsuyoshi/golden_test_string_over_demo

テストコード

以下コードで、FirstPageというWidgetを複数解像度でGoldenTestできます。
FirstPageはTextとButtonがあるだけのシンプルな画面です。任意に置き換えて大丈夫です。

first_page_golden_test.dart
void main() {
  testGoldens('firstPage', (WidgetTester tester) async {
    //配列で複数解像度を追加していく
    final builder = DeviceBuilder()
      ..overrideDevicesForAllScenarios(devices: [
        Device.phone,
        Device.iphone11,
        Device.tabletPortrait,
        Device.tabletLandscape,
      ])
      
      //どのWidgetでテストするか指定する
      ..addScenario(
        widget: FirstPage(),
        name: 'default page',
      );
      
    //複数解像度でスクリーンショットをビルドする
    await tester.pumpDeviceBuilder(builder);
    //マスターのスクリーンショットと現在のスクリーンショットを比較テストを実行する
    await screenMatchesGolden(tester, 'firstPage');
  });
}

ここまで書けたら以下コマンドを叩いてGolden(マスターのスクリーンショット)を作成します。

flutter test --update-goldens

無事に成功すればgoldenフォルダが生成されて、その配下にスクリーンショットが出来上がります。
firstPage_masterImage

あとは、以下コマンドを叩けばgoldenフォルダのマスタースクリーンショットと現在のスクリーンショットを比較してばちゃんとWidgetTestしてくれます。

flutter test

終わりに

レスポンシブがちゃんと出来ているか実機やシミュレータを使って確認するのって地味にだるいので、テストに使わないとしてもけっこう便利だなと思いました。

GitHubで編集を提案

Discussion