我正在尝试通过以下功能测试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)));
});
});
}
测试它有两个主要问题。
context
参数,我需要使用Builder
,它需要将Widget匿名闭包作为builder:
(在屏幕上看到)。void
和tester.pumpWidget
方法需要一个Widget对象,而我不能简单地返回一个Widget,因为showDialog
返回了Future<Widget>
在Builder
构造函数中。 我想以某种方式创建此Widget,并使用finder
对其进行测试或更改功能,以使其将showDialog作为Widget而不是Future返回(但我相信这是不可能的)。