В моем коде функция выдает значение в поток через одну минуту. Допустим, это таймер. Я хочу сделать модульное тестирование (не тестирование виджетов, потому что функция живет в файле блока). Я пытался использовать fakeAsync, как описано в doc https://api.flutter.dev/flutter/quiver.testing.async/FakeAsync-class.html, но безуспешно. Тест не пройден по таймауту.
Протестированный код:
class BarcodeBloc {
Timer _timer;
StreamController<bool> _timerFinished;
BarcodeBloc() {
_timerFinished = new StreamController();
}
Stream<bool> get cameraTimeout => _timerFinished.stream;
void _tick() {
_timerFinished.add(true);
}
void startTimer() {
stopTimer();
print("starting timer");
_timer = Timer(interval, _tick);
}
void stopTimer() {
if (_timer != null) {
_timer.cancel();
}
}
}
Мой код для теста:
void main() {
test("After one minute emits true", () {
new FakeAsync().run((async) {
BarcodeBloc barcodeBloc = new BarcodeBloc(preferenceProvider);
barcodeBloc.startTimer();
async.elapse(duration);
expect(barcodeBloc.cameraTimeout, emits(true));
});
}