Я пишу unittest для функции showAlertDialog()
, которая показывает диалоговое окно с коротким сообщением и кнопкой ОК.
Функция выглядит следующим образом
import 'package:flutter/material.dart';
void showAlertDialog(BuildContext context) {
Widget okButton = FlatButton(
child: Text("OK"),
onPressed: () {
Navigator.of(context).pop(); // Closes alert
Navigator.of(context).pop(); // Closes drawer
},
);
AlertDialog alert = AlertDialog(
title: Text("Success", style: TextStyle(color: Colors.green)),
content: Text("API key has beed updated succesfully."),
actions: [
okButton,
],
);
showDialog(
context: context,
builder: (BuildContext context) => alert,
);
}
Использование документации Flutter Я пытался использовать класс testWidget, чтобы проверить, правильно ли создается виджет оповещения следующим образом:
main() {
testWidgets('Show code 200', (WidgetTester tester) async {
await tester.pumpWidget(Builder(builder: (BuildContext context) {
return showAlertDialog(context);
}));
final titleFinder = find.text('Success');
final messageFinder = find.text('API key has beed updated succesfully.');
expect(titleFinder, findsOneWidget);
expect(messageFinder, findsOneWidget);
});
}
Но это не скомпилируется из-за error: The return type 'void' isn't a 'Widget', as defined by anonymous closure. (return_of_invalid_type_from_closure at [app] test\alert_dialog_test.dart:8)
.
Когда я удаляю оператор void
из объявления showAlertDialog, он будет скомпилирован, но произойдет сбой со следующей ошибкой:
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building Builder(dirty):
No MaterialLocalizations found.
Builder widgets require MaterialLocalizations to be provided by a Localizations widget ancestor.
Localizations are used to generate many different messages, labels,and abbreviations which are used
by the material library.
To introduce a MaterialLocalizations, either use a MaterialApp at the root of your application to
include them automatically, or add a Localization widget with a MaterialLocalizations delegate.
The specific widget that could not find a MaterialLocalizations ancestor was:
Builder
The ancestors of this widget were:
[root]
Как правильно выполнить модульное тестирование этой функции?