【问题标题】:Can't enter text in flutter test无法在颤振测试中输入文本
【发布时间】:2018-10-06 16:18:09
【问题描述】:

我一直在尝试测试一个元素,当按下 IconButton 时,Text 对象会更改为 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'

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

示例代码:

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");

我真的不确定是什么导致了问题,但是如果我删除最后两行,它运行良好(尽管我没有实际测试我的输入)。

【问题讨论】:

    标签: testing dart flutter flutter-test


    【解决方案1】:

    Key 分配给可编辑文本

    new EditableText(
      key: new Key('mySpecialEditableText1234'),
      controller: myCtrl,
      style: myStyle,
      focusNode: myFocusNode,
    )
    

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

    find.byKey(new Key('mySpecialEditableText1234'))
    

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

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

    【讨论】:

    • 测试者实例发现小部件很好,我将把解决方案作为另一个答案发布。
    【解决方案2】:

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

    添加

    await tester.pump(Duration(milliseconds:400));
    

    完全按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      相关资源
      最近更新 更多