flutter测试无法输入文字

Ali*_*yre 10 testing dart flutter flutter-test

我一直在尝试测试一个元素,当按下 IconButton 时,文本对象会更改为 TextFormField。当我尝试测试这个时,我收到以下错误:

A Timer is still pending even after the widget tree was disposed.
'package:flutter_test/src/binding.dart': Failed assertion: line 672 pos 7:
'_fakeAsync.nonPeriodicTimerCount == 0'
Run Code Online (Sandbox Code Playgroud)

尽管小部件没有使用我知道的任何计时器?

示例代码:

await tester.tap(find.byType(IconButton));
await tester.pump();

expect(find.byType(TextFormField), findsOneWidget);
await tester.pump();
await tester.enterText(find.byType(EditableText), "0.2");
Run Code Online (Sandbox Code Playgroud)

我真的不确定是什么导致了问题,但如果我删除最后两行,它就可以正常运行(尽管我无法实际测试我的输入)。

Ali*_*yre 10

问题是所使用的文本字段有 300 毫秒的延迟,以便键盘可以滚动到视图中,然后应用程序可以滚动到文本字段。我完全忽略了文本字段有这种延迟并且没有考虑到它。

添加

await tester.pump(Duration(milliseconds:400));
Run Code Online (Sandbox Code Playgroud)

完全按照预期工作。


Arn*_*rge 8

将键分配给可编辑文本

new EditableText(
  key: new Key('mySpecialEditableText1234'),
  controller: myCtrl,
  style: myStyle,
  focusNode: myFocusNode,
)
Run Code Online (Sandbox Code Playgroud)

并在您的测试中访问此小部件:

find.byKey(new Key('mySpecialEditableText1234'))
Run Code Online (Sandbox Code Playgroud)

如果这没有找到您的小部件,则您的tester实例可能没有提取正确的小部件

注意:确保您正在通过正确的导航路径。您不能直接泵送不在树中第一个的小部件