重置 TestTextInput 状态

概述

现在 TestTextInput 实例(系统屏幕键盘的存根)的状态会在测试之间重置。

上下文

Flutter 测试框架中使用一个名为 TestTextInput 的类来跟踪和操作 widgets 测试中的编辑状态。个别测试可以通过方法调用来修改此对象的内部状态,有时是间接的(例如通过 SystemChannels.textInput 设置自己的处理程序)。在其之后的的测试可能会检查 WidgetTester.testTextInput 的状态,拿到不符合预期的值。

更改描述

现在 WidgetTester.testTextInput 的状态会在运行 testWidgets 测试之前重置。

迁移指南

之前依赖于 WidgetTester.testTextInput 运行时脏状态的测试必须更新。例如 packages/flutter/test/material/text_field_test.dart 文件中的 'Controller can update server' 测试。在这之前,其它测试使得 WidgetTester.testTextInput 处于脏状态,并且在应该设置状态的时候设置状态失败,所以它通过了测试。

迁移前的代码:

widgetsTest 里,在实际更改文本编辑 widget 上的文本之前,此调用可能已成功:

    expect(tester.testTextInput.editingState['text'], isEmpty);

迁移后的代码:

要么完全删除该调用,要么考虑使用以下声明来确认状态尚未被修改:

    expect(tester.testTextInput.editingState, isNull);

时间轴

发布于版本:1.16.3
发布于稳定版本:1.17

参考文献

API 文档:

相关 issues:

相关 PR: