Я пытаюсь проверить виджет 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
, который требует анонимного закрытия виджета как builder:
(как виднона экране). - Функция возвращает метод
void
и tester.pumpWidget
, который я пытался использовать, требует объект Widget, и я не могу просто вернуть Widget, потому что showDialog
возвращает Future<Widget>
, что запрещено вBuilder
конструктор.
Я хочу как-то создать этот виджет и с помощью finder
протестировать его или изменить функцию таким образом, чтобы она возвращала мой showDialog как виджет, а не как будущее (но я считаю, что это невозможно),