TestWidgetsFlutterBinding.clock 更改
摘要
#TestWidgetsFlutterBinding.clock
现在来自 package:clock
而不是 package:quiver
。
上下文
#flutter_test
包正在删除其对较重 quiver
包的依赖,转而依赖于两个更具针对性和更轻量级的包,clock
和 fake_async
。
这可能会影响从 TestWidgetsFlutterBinding
获取时钟并将其传递给期望 package:quiver
中的 Clock
的 API 的用户代码,例如以下一些代码
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
迁移指南
#此更改后您可能会看到类似以下的错误
Error: The argument type 'Clock/*1*/' can't be assigned to the parameter type 'Clock/*2*/'.
- 'Clock/*1*/' is from 'package:clock/src/clock.dart' ('<pub-cache>/clock/lib/src/clock.dart').
- 'Clock/*2*/' is from 'package:quiver/time.dart' ('<pub-cache>/quiver/lib/time.dart').
选项 #1:从 package:clock Clock 创建一个 package:quiver Clock
#最简单的迁移方法是使用 package:clock
中的时钟创建一个 package:quiver
时钟,这可以通过将 .now
函数 tearoff 传递给 Clock
构造函数来完成
迁移前的代码
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
迁移后的代码
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(Clock(tester.binding.clock.now));
});
选项 #2:更改 API 以接受 package:clock Clock
#如果您拥有正在调用的 API,您可能希望将其更改为接受来自 package:clock
的 Clock
。这是一个基于多少个地方使用除了从 TestWidgetsFlutterBinding
获取的时钟之外的其他东西调用此 API 的判断。
如果您采用此方法,则传递 tester.binding.clock
的调用站点无需修改,但其他调用站点需要修改。
选项 #3:将 API 更改为接受 DateTime function()
#如果您仅将 Clock
用于其 now
函数,并且您控制 API,那么您也可以将其更改为直接接受该函数而不是 Clock
。这使得它可以轻松地使用任何类型的 Clock
调用,方法是从任何类型的时钟传递 now
方法的 tearoff
迁移前的调用代码
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
迁移后的调用代码
testWidgets('some test', (WidgetTester tester) {
modifiedApiThatTakesANowFunction(tester.binding.clock.now);
});
时间线
#包含于版本:1.18.0
稳定版发布:1.20
参考
#API 文档
相关 PR
- PR 54125:删除 flutter_test quiver 依赖,改用 fake_async 和 clock
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-04-04。 查看源代码 或 报告问题.