在 flutter 中测试小部件。每次我都会遇到这个问题
我对引导小部件的方法有疑问 等待 tester.pumpWidget( UserDetails();
void main() {
var emailField = find.byKey(Key("fname-field"));
var passwordField = find.byKey(Key("lname-field"));
var passwordField1 = find.byKey(Key("enumber-field"));
var signInButton = find.text("SUBMIT");
group("UserDetails Screen test", () {
testWidgets("Check the buttons in User screen",
(WidgetTester tester) async {
await tester.pumpWidget( UserDetails()
);
await tester.pump();
expect(emailField, findsOneWidget);
expect(passwordField, findsOneWidget);
expect(signInButton, findsOneWidget);
expect(passwordField1, findsOneWidget);
});
});
}
这里我遇到了这样的错误
══╡ Flutter 测试框架捕获异常 ╞═══════════════════════════════════════ ══════════ ═══以下 抛出消息:在执行期间检测到多个异常 (2) 当前测试的运行,至少有一个是意外的。
附加到渲染时抛出以下 FirebaseException 树:[core/no-app] 未创建 Firebase 应用程序“[DEFAULT]” - 调用 Firebase.initializeApp()
似乎您在页面被抽出之前就尝试找到小部件。
像这样更改范围:
void main() {
group("UserDetails Screen test", () {
testWidgets("Check the buttons in User screen",
(WidgetTester tester) async {
await tester.pumpWidget(UserDetails());
await tester.pumpAndSettle();
await tester.pump();
var emailField = find.byKey(Key("fname-field"));
var passwordField = find.byKey(Key("lname-field"));
var passwordField1 = find.byKey(Key("enumber-field"));
var signInButton = find.text("SUBMIT");
expect(emailField, findsOneWidget);
expect(passwordField, findsOneWidget);
expect(signInButton, findsOneWidget);
expect(passwordField1, findsOneWidget);
});
});
}
我认为这对你有用 将您的小部件包装到 MaterialAapp 和 Scaffold 有时,您的小部件层次结构需要来自脚手架和 MaterialApp 上下文的上下文大小。
void main() {
var emailField = find.byKey(Key("fname-field"));
var passwordField = find.byKey(Key("lname-field"));
var passwordField1 = find.byKey(Key("enumber-field"));
var signInButton = find.text("SUBMIT");
group("UserDetails Screen test", () {
testWidgets("Check the buttons in User screen",
(WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: UserDetails(),
),
),
);
await tester.pump();
expect(emailField, findsOneWidget);
expect(passwordField, findsOneWidget);
expect(signInButton, findsOneWidget);
expect(passwordField1, findsOneWidget);
});
});
}