#flutter #testing #widget-test-flutter
#flutter #тестирование #widget-test-flutter
Вопрос:
Я тестирую пользовательский виджет индикатора выполнения.
Я инициализирую buffered
параметр значением по умолчанию Duration.zero
:
class ProgressBar extends LeafRenderObjectWidget {
const ProgressBar({
Key key,
@required this.progress,
@required this.total,
this.buffered,
this.onSeek,
this.barHeight = 5.0,
this.baseBarColor,
this.progressBarColor,
this.bufferedBarColor,
this.thumbRadius = 10.0,
this.thumbColor,
this.timeLabelLocation,
}) : super(key: key);
final Duration progress;
final Duration total;
final Duration buffered;
final ValueChanged<Duration> onSeek;
final Color baseBarColor;
final Color progressBarColor;
final Color bufferedBarColor;
final double barHeight;
final double thumbRadius;
final Color thumbColor;
final TimeLabelLocation timeLabelLocation;
@override
_RenderProgressBar createRenderObject(BuildContext context) {
final theme = Theme.of(context);
final primaryColor = theme.colorScheme.primary;
final textStyle = theme.textTheme.bodyText1;
return _RenderProgressBar(
progress: progress,
total: total,
buffered: buffered ?? Duration.zero, // <-- here
onSeek: onSeek,
barHeight: barHeight,
baseBarColor: baseBarColor ?? primaryColor.withOpacity(0.24),
progressBarColor: progressBarColor ?? primaryColor,
bufferedBarColor: bufferedBarColor ?? primaryColor.withOpacity(0.24),
thumbRadius: thumbRadius,
thumbColor: thumbColor ?? primaryColor,
timeLabelLocation: timeLabelLocation ?? TimeLabelLocation.below,
timeLabelTextStyle: textStyle,
);
}
@override
void updateRenderObject(
BuildContext context, _RenderProgressBar renderObject) {
final theme = Theme.of(context);
final primaryColor = theme.colorScheme.primary;
final textStyle = theme.textTheme.bodyText1;
renderObject
..progress = progress
..total = total
..buffered = buffered ?? Duration.zero // <-- and here
..onSeek = onSeek
..barHeight = barHeight
..baseBarColor = baseBarColor ?? primaryColor.withOpacity(0.24)
..progressBarColor = progressBarColor ?? primaryColor
..bufferedBarColor = bufferedBarColor ?? primaryColor.withOpacity(0.24)
..thumbRadius = thumbRadius
..thumbColor = thumbColor ?? primaryColor
..timeLabelLocation = timeLabelLocation ?? TimeLabelLocation.below
..timeLabelTextStyle = textStyle;
}
}
Однако, когда я тестирую buffered
свойство, тест завершается неудачно.
Вот мой тест:
import 'dart:ui';
import 'package:audio_video_progress_bar/audio_video_progress_bar.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Default properties are OK', (WidgetTester tester) async {
await tester.pumpWidget(
ProgressBar(
progress: Duration.zero,
total: Duration(minutes: 5),
),
);
ProgressBar progressBar = tester.firstWidget(find.byType(ProgressBar));
expect(progressBar, isNotNull);
expect(progressBar.progress, Duration.zero); // OK
expect(progressBar.total, Duration(minutes: 5)); // OK
expect(progressBar.barHeight, 5.0); // OK
expect(progressBar.onSeek, isNull); // OK
expect(progressBar.thumbRadius, 10.0); // OK
expect(progressBar.buffered, Duration.zero); // Fails
});
}
Значения double
по умолчанию были в порядке, но buffered
значение по умолчанию по умолчанию не задано:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure object was thrown running a test:
Expected: Duration:<0:00:00.000000>
Actual: <null>
Должен ли я делать больше, чем просто перекачивать виджет, чтобы разрешить применение значений по умолчанию?
Комментарии:
1. Я только что понял, что мне нужно найти объект визуализации, а не виджет.
2. Можно ли найти объект визуализации, не делая его общедоступным?