如何在Flutter中测试由void函数创建的小部件?

时间:2019-10-11 18:07:33

标签: testing flutter dart mockito flutter-test

我正在尝试通过以下功能测试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)));
    });
  });
}

Screen version

测试它有两个主要问题。

  1. 因为有context参数,我需要使用Builder,它需要将Widget匿名闭包作为builder:(在屏幕上看到)。
  2. 该函数返回我尝试使用的voidtester.pumpWidget方法需要一个Widget对象,而我不能简单地返回一个Widget,因为showDialog返回了Future<Widget>Builder构造函数中。

我想以某种方式创建此Widget,并使用finder对其进行测试或更改功能,以使其将showDialog作为Widget而不是Future返回(但我相信这是不可能的)。

0 个答案:

没有答案