我在Flutter中有一个小部件测试,它对测试的小部件进行了测试并在打开时执行后台操作(staticWrapper.requestPermission()),该操作返回一个Future并根据其结果设置状态。 问题是测试没有等待此Future完成,测试代码如下:
/// When micro permission denied, should show error message.
testWidgets('When micro permission denied, should show error message.',
(WidgetTester tester) async {
when(staticWrapper.requestPermission(Permission.RecordAudio))
.thenAnswer((_) => Future.value(PermissionStatus.denied));
await tester.pumpWidget(widget);
final loginText = find.text(callScreen_microPermissionDenied);
expect(loginText, findsOneWidget);
});
受影响的小部件代码:
void _requestMicroPermission() async {
final result =
await staticWrapper.requestPermission(Permission.RecordAudio);
debugPrint("Microphone permission status: $result");
if (result == PermissionStatus.authorized) {
native.init();
} else {
setState(() {
_loginText = tnsManager.getText(TranslationsManager.callScreen_microPermissionDenied);
});
}
在调用setState()之前,需要调用expect()方法。
需要帮助吗?
setState
时,你必须再次调用tester.pump
。 - Rémi RousseletandSettle
。一个简单的pump
就足够了。 - Rémi Rousselet