flutter - 如何用flutter_test等待预定的未来?
问题描述
我的小部件执行一个异步任务,我想检查它是否完成。
但似乎小部件测试器在任务执行之前终止了测试。完整的代码在这里。
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()
,因为它应该是小部件的内部任务。
解决方案
TryWidgetTester
的runAsync
函数可以等待任意时间,以完成内部小部件的异步任务。
推荐阅读
- ios - iOS:以编程方式创建的 UINavigationController 的导航栏未扩展到安全区域
- java - 个人电脑无法访问maven Central
- python-3.x - Pandas:将纳秒时间增量与时间戳相加
- freepascal - 连接到 Oracle DB 时出现 External: SIGSEGV 错误
- ruby - MAC 中的 Ruby 和 Gem
- bash - 在 Keycloak/jboss 上发布启动脚本
- c# - 延迟属性初始化在 C# 中不起作用
- swift - 在@main 上收到 EXC_BAD_ACCESS 错误,并且异常断点不显示失败行
- javascript - 使用 javascript 将内容从一个元素传输到另一个元素
- c++ - 如何在 Visual Studio 的 CppUnitTestFramework (C++) 中为 TEST_METHOD 设置内联超时?