Flutter - 预期 : should do the following in order: emits an event Empty, NumberTriviaError,实际:空:不是 Stream 或 SteamQue

标签 flutter dart

我正在学习 Flutter Clean Architecture TDD 类(class)近 20 天。我正在编写 Stream (mapEventToState) 的单元测试,这是我的测试代码:

test(
  'should emit [Error] when the input is invalid',
      () async {
    // arrange
    when(mockInputConverter!.stringToUnsignedInteger(SIGNED_STRINGS))
        .thenReturn(Left(InvalidInputFailure()));
    // assert later
    final expected = [
      // The initial state is always emitted first
      NumberTriviaEmpty(),
      NumberTriviaError(message: INVALID_INPUT_FAILURE_MESSAGE),
    ];
    expectLater(bloc!.state, emitsInOrder(expected));
    // act
    bloc!.add(GetTriviaForConcreteNumber(tNumberString));
  },
);

忘记所有关于(何时),因为我已经模拟了所有类并简单地返回一个 Left of Either 这很好,这显然是一个失败。因此,预期数据的问题出现了,我刚刚创建了预期列表并将其传递给方法“expectLater”,以“emitsInOrder”的顺序传递。

我的 Stream 实现代码在这里:

@override
Stream<NumberTriviaState> mapEventToState(NumberTriviaEvent event,) async* {
if (event is GetTriviaForConcreteNumber) {
  final inputEither =
  inputConverter.stringToUnsignedInteger(event.numberString);

  yield* inputEither!.fold(
        (failure) async* {
      yield NumberTriviaError(message: INVALID_INPUT_FAILURE_MESSAGE);
    },
    // Although the "success case" doesn't interest us with the current test,
    // we still have to handle it somehow.
        (integer) => throw UnimplementedError(),
  );
}

我在标题中输入的[错误]没有完成,因为它有点长我在这里分享它请看看它实际上我做错了什么。

Expected: should do the following in order:
      • emit an event that NumberTriviaEmpty:<NumberTriviaEmpty()>
      • emit an event that NumberTriviaError:<NumberTriviaError(Invalid Input - The number must be a positive integer or zero.)>
 Actual: NumberTriviaEmpty:<NumberTriviaEmpty()>
 Which: was not a Stream or a StreamQueue

我所做的一切都是一样的,它对我的​​期望是什么,但它仍然抛出这个异常。我在这个错误中停留了大约 4 天,我到处搜索,但没有找到任何解决方法,如果我做错了什么,请在评论部分或答案中提出您的建议。谢谢你:)

最佳答案

除了将 'bloc!.state' 更改为 'bloc'(根据 QuangNV 和 ouflak),还尝试将测试中的 'async' 更改为 asynchronous generator , 'async*', 以匹配您的 Stream 实现中使用的代码。

test(
  'should emit [Error] when the input is invalid',
      () async* {
    // arrange

关于Flutter - 预期 : should do the following in order: emits an event Empty, NumberTriviaError,实际:空:不是 Stream 或 SteamQue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68990111/

相关文章:

flutter - 创建 bool 流

Dart 编译器或命令行语法检查

android - 如何在 Flutter 中安排通知?

facebook - 将带有条件的Fb登录按钮放在容器中的位置

android - 为什么重新排列项目后不重建我的列表

Flutter-关于在 Cloud Firestore 中创建聊天应用时的读取数

flutter - 在父窗口小部件中访问子窗口小部件的变量(带有Dart的Flutter)

每次关闭终端后, flutter 路径都不会永久保存在 z shell mac os catalina 上

dart - Dart 中类构造函数语法的区别

dart - '无效的覆盖。实现接口(interface)时类型不是子类型