如何测试流是否在Dart中的特定位置发出值?

时间:2019-09-18 22:34:48

标签: flutter dart

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

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

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

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

因此,我想忽略stream发出的前3个值,并检查第4个值是否等于foo。如何检查特定位置?

PS:这样做有很多怪异的方法,例如使用expectInOrder,但是我的测试不应该关心发出的前3个值,如果我要检查第8个值或说第20个值,则不会。使用expectInOrder是没有道理的。

1 个答案:

答案 0 :(得分:0)

您可以使用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));
});