问题描述
我做了一个最小可重复的例子来说明我的问题:
感谢 Gunthers 的回答 How to get the full stack trace for async execution,我能够打印完整的跟踪记录,包括调用到测试根的每个函数。
email.css
使用此代码,它意味着 import 'package:Flutter/material.dart';
import 'package:Flutter_test/Flutter_test.dart';
import 'package:stack_trace/stack_trace.dart';
late WidgetTester tester;
void expectFoo() {
expect(find.text('Foos'),findsOneWidget);
}
Future<void> build() async {
await tester.pumpWidget(Column(
children: [
CircularProgressIndicator(),Text('Foo',textDirection: TextDirection.ltr),],));
await tester.pumpAndSettle(); // <- This fails the test
expectFoo(); // <- This also fails the test but comment above line first
}
Future<void> setup() async {
await build();
}
Future<void> testIfFooIsThere() async {
await setup();
}
void main() {
testWidgets('Stack trace',(WidgetTester _tester) async {
tester = _tester;
await Chain.capture(() async {
await testIfFooIsThere();
},onError: (e,stack) {
print(e);
print("Chain ${Trace.from(stack).terse}");
throw e;
});
});
}
处的测试失败。这是跟踪:
pumpAndSettle()
从上面的跟踪可以看出,我得到了堆栈跟踪中的每个函数,直到 ══╡ EXCEPTION CAUGHT BY FlutteR TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following assertion was thrown running a test:
pumpAndSettle timed out
When the exception was thrown,this was the stack:
#1 WidgetTester.pumpAndSettle.<anonymous closure> (package:Flutter_test/src/widget_tester.dart:651:11)
#3 TestAsyncUtils.guard.completionHandler (package:Flutter_test/src/test_async_utils.dart:111:16)
#17 WidgetTester.pumpAndSettle.<anonymous closure> (package:Flutter_test/src/widget_tester.dart:0:0)
#21 TestAsyncUtils.guard (package:Flutter_test/src/test_async_utils.dart:114:19)
#22 WidgetTester.pumpAndSettle (package:Flutter_test/src/widget_tester.dart:646:27)
#23 build (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:17:16)
#26 setup (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:22:9)
#27 testIfFooIsThere (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:26:9)
#28 main.<anonymous closure>.<anonymous closure> (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:33:13)
#29 main.<anonymous closure>.<anonymous closure> (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:32:25)
#36 main.<anonymous closure> (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:32:17)
#37 main.<anonymous closure> (file:///Users/samran/AndroidStudioProjects/flit_ride/test/widget_test_stack.dart:30:30)
#38 testWidgets.<anonymous closure>.<anonymous closure> (package:Flutter_test/src/widget_tester.dart:156:29)
(elided 25 frames from dart:async,dart:async-patch,and package:stack_trace)
The test description was:
Stack trace
所以现在当我评论这行 testWidgets > testIfFooIsThere > setup > build
时,
我希望在 await tester.pumpAndSettle(); // <- This fails the test
但堆栈跟踪仅包括 expect(find.text('Foos'),findsOneWidget);
和 build
expectFoo
为什么??
最终,我的目标是在测试期间发生错误时,打印每个函数及其行号,从 testWidgets 到出错的行。欢迎使用替代解决方案
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)