gpt4 book ai didi

unit-testing - 如何测试流在单元测试(Flutter)的时间间隔内发出任何东西?

转载 作者:行者123 更新时间:2023-12-02 04:24:16 28 4
gpt4 key购买 nike

在我的代码中,该函数在一分钟后向流发出值。假设它是一个计时器。我想做单元测试(不是小部件测试,因为该函数存在于 bloc 文件中)。我尝试按照文档 https://api.flutter.dev/flutter/quiver.testing.async/FakeAsync-class.html 中的描述使用 fakeAsync但没有运气。超时测试失败。
经测试的代码:

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));
});
}

最佳答案

我遇到了同样的问题。好像不是emitsFakeAsync 配合良好我在使用任何 await 时遇到问题在 FakeAsync 区域内调用,所以我最终做的是:

void main() {
var streamOutput;

test("After one minute emits true", () {
FakeAsync().run((async) {
BarcodeBloc barcodeBloc = BarcodeBloc(preferenceProvider);
barcodeBloc.startTimer();
barcodeBloc.cameraTimeout.listen((value) {
streamOutput = value;
});

async.elapse(duration);
expect(streamOutput, /* expected value */);
});
}

关于unit-testing - 如何测试流在单元测试(Flutter)的时间间隔内发出任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56372855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com