有没有办法在Flutter测试中伪造DateTime.now()?

时间:2018-12-07 17:08:16

标签: testing time flutter

我可以将时间传递给我的窗口小部件,但是我的窗口小部件应该在自身中实例化时间,而不是从父窗口小部件接收DateTime。

3 个答案:

答案 0 :(得分:1)

extension CustomizableDateTime on DateTime {
  static DateTime customTime;
  static DateTime get current {
    if (customTime != null)
      return customTime;
    else
      return DateTime.now();
  }
}

只需在生产代码中使用CustomizableDateTime.current。您可以在以下测试中修改返回的值:CustomizableDateTime.customTime = DateTime.parse("1969-07-20 20:18:04");。无需使用第三方库。

答案 1 :(得分:0)

时钟包:https://pub.dartlang.org/documentation/clock/latest/clock/clock-library.html可让您向测试中注入假时钟。

答案 2 :(得分:0)

正如 Mary 所说,一个非常巧妙的方法是使用由 Dart 团队维护的 the clock package

正常使用:

import 'package:clock/clock.dart';

void main() {
  // prints current date and time
  print(clock.now());
}

覆盖当前时间:

import 'package:clock/clock.dart';

void main() {
  withClock(
    Clock.fixed(DateTime(2000)),
    () {
      // always prints 2000-01-01 00:00:00.
      print(clock.now());
    },
  );
}

我对此进行了更详细的描述on my blog

请注意,对于小部件测试,您需要在 pumpWidget 回调中包装 pumpexpectwithClock - 仅包装 pumpWidget 不起作用.