【问题标题】:How to test if stream emits a value at a particular position in Dart?如何测试流是否在 Dart 的特定位置发出值?
【发布时间】:2019-09-18 22:34:48
【问题描述】:

如果我有一个发出 Dog 对象的流。

Stream<Dog> dogStream;
class Dog {
  final String name;
  final String breed;

  Dog(this.name, this.breed);
}

我想测试第 4 个值中发出的名称。

所以我想忽略stream 发出的前三个值,并检查第四个值是否等于foo。如何在特定位置进行检查?

PS: 有一些 hacky 方法,比如使用 expectInOrder,但我的测试不应该关心发出的前 3 个值,如果我想检查第 8 个值或说第 20 个值,它不会感觉使用expectInOrder

【问题讨论】:

标签: flutter dart


【解决方案1】:

您可以使用elementAt 或跳过流的前 3 个值并检查发出的项目:

test('stream', () async {
  Stream<int> stream() => Stream.fromIterable([1, 2, 3, 4, 5]);

  expect(await stream().elementAt(3), 4);
  expect(stream().skip(3), emitsInOrder(<dynamic>[4]));
  expect(stream().skip(3), emits(4));
});

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多