Как проверить виджет, созданный функцией void во флаттере? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь проверить виджет showDialog из следующей функции:

void handleResponseCode(String code, BuildContext context) async {
  String respond;
  Map<String, String> responses = {
    '200': 'Connection successful',
    '401': 'Invalid or no API key found',
    '403': 'Your API access isn\'t enabled.',
    '500': 'We hit a server error.'
  };
  responses.containsKey(code)
      ? respond = responses[code]
      : respond = 'Unknown error accured during connection.';
  AlertDialog alert = AlertDialog(
    title: code == '200'
        ? Text('Success', style: TextStyle(color: Colors.green))
        : Text('Connection error', style: TextStyle(color: Colors.red)),
    content: Text(respond),
    actions: <Widget>[
      FlatButton(
        child: Text('OK'),
        onPressed: Navigator.of(context).pop,
      )
    ],
  );
  showDialog(context: context, builder: (BuildContext context) => alert);
}

С помощью следующего теста:

main() {
  group('Handling different response code', () {
    testWidgets('200 OK', (WidgetTester tester) async {
      await tester.pumpWidget(Builder(
          builder: (BuildContext context) =>
              handleResponseCode('200', context)));
    });
  });
}

Версия экрана

У меня есть две основные проблемы с его тестированием.

  1. Из-за параметра context мне нужно использовать Builder, который требует анонимного закрытия виджета как builder: (как виднона экране).
  2. Функция возвращает метод void и tester.pumpWidget, который я пытался использовать, требует объект Widget, и я не могу просто вернуть Widget, потому что showDialog возвращает Future<Widget>, что запрещено вBuilder конструктор.

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

...