【发布时间】:2021-06-30 08:18:13
【问题描述】:
我的小部件执行一个异步任务,我想检查它是否完成。
但似乎小部件测试器在任务执行之前终止了测试。整个代码是here。
class MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
test();
}
Stream<int?> stream(Future<void> Function() worker) async* {
Stream<int?> work() async* {
await worker();
yield 3;
}
yield* work();
}
Future<void> sampleWorker() async {
throw Error();
}
Future<void> test() async {
print('start');
try {
await for (final v in stream(sampleWorker)) {
print(v);
}
print('point 1');
} catch (error, stack) {
print(stack);
}
print('done');
}
}
void main() {
testWidgets('Widget test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
await tester.pumpAndSettle(const Duration(milliseconds: 1000));
});
test('Plain test', () async {
await MyHomePageState().test();
});
}
我希望两个测试都打印堆栈跟踪,但只有“普通测试”显示预期行为。以下是日志。
start
✓ Widget test
start
#0 MyHomePageState.sampleWorker (package:bug_report/main.dart:48:5)
#1 MyHomePageState.stream.work (package:bug_report/main.dart:40:19)
<asynchronous suspension>
#2 StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
<asynchronous suspension>
done
✓ Plain test
如何进行第一次测试打印堆栈跟踪?我不应该等待test(),因为它应该是小部件的内部任务。
【问题讨论】:
标签: flutter flutter-test