Есть ли способ подделать DateTime.now() в тесте Flutter?
Я могу передать время моему виджету, но предполагается, что мой виджет сам создает время, а не получает DateTime от родительского виджета.
3 ответа
Пакет с часами: https://pub.dartlang.org/documentation/clock/latest/clock/clock-library.html позволяет ввести в тест ложные часы.
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");
. Нет необходимости использовать сторонние библиотеки.
Как сказала Мэри, очень удобный способ - использовать пакет часов , который поддерживается командой Dart.
Нормальное использование:
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());
},
);
}
Подробнее об этом я писал в своем блоге .
Просто обратите внимание, что для тестов виджетов вам нужно обернуть,
pump
а также
expect
в
withClock
обратный вызов - только упаковка
pumpWidget
не работает.