Как указать Window для тестов? - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно, чтобы экран в тесте выглядел так же, как на физическом устройстве (или симуляторе).Как мне это сделать?В моем случае идентификатор устройства Iphone SE.

Я написал тест, который сохраняет снимок экрана на диск:

    testWidgets('test', (WidgetTester tester) async {
  final AutomatedTestWidgetsFlutterBinding binding = tester.binding;
  binding.renderView.configuration = TestViewConfiguration(size: Size(640, 1136));
  var widget = Scaffold(
    appBar: AppBar(title: Text('title'),),
    body: Column(children: <Widget>[
      RaisedButton(
        child: Text('button'),
        onPressed: () {},)
    ],),
  );

  var key = new GlobalKey();
  await tester.pumpWidget(
      MaterialApp(home: RepaintBoundary(key: key, child: widget),),
  );

  await tester.pumpAndSettle();
  await tester.runAsync(() async {
    RenderRepaintBoundary boundary = key.currentContext.findRenderObject();
    var image = await boundary.toImage();
    var byteData = await image.toByteData(format: ImageByteFormat.png);
    var pngBytes = byteData.buffer.asUint8List();
    await File('screen.png').writeAsBytes(pngBytes);
  });
});

, если использовать ViewConfiguration с devicePixelRatio вместо TestViewConfiguration, devicePixelRatio игнорируя

MediaQuery тоже не работает, если обернуть MaterialApp

панель приложения и кнопку меньше, чем на симуляторе

экран из теста: screen from test

, но ожидается (виджетышкала): simulator screen

1 Ответ

0 голосов
/ 19 декабря 2018

Вы получаете блоки вместо текста, потому что Flutter использует специальный тестовый шрифт (Ahem), в котором все символы являются просто блоками.
Это упрощает их одинаковую визуализацию на Linux (CI) и других платформах.Я не знаю, есть ли другие причины.

Я также не смог заставить изображения работать в золотых тестах.

https://github.com/flutter/engine/pull/6913 было недавно объединено, чтобы позволитьзагрузка пользовательских шрифтов в тестах.

Вы можете использовать flutter run --use-test-fonts, чтобы заставить Flutter использовать шрифт Ahem при запуске приложения на реальном устройстве, чтобы вы могли визуализировать, как будет выглядеть тест.

Смежные вопросы

Я не знаю, работает ли шрифт, загруженный таким образом, в золотых тестах (они могут все еще не работать подобно изображениям)

Если вы хотите указать другие размеры экрана, см. (не проверял сам) Как проверить виджеты Flutter на разных размерах экрана?

Не уверен, что это предложение по-прежнему имеет какое-либо значение.Я нашел его довольно ограниченным, и вышеупомянутое предложение, вероятно, работает лучше) В тестировании виджетов Flutter, как сделать media.orientation to Portrait?

...