使用 Flutter 进行块测试,等待异步操作

Rob*_*ten 7 async-await flutter bloc-test

我的 Flutter 代码中有这个 bloc_test

blocTest<ProjectsBloc, ProjectsState>(
      'emits [ProjectsState.loading(), ProjectsState.succes([])] with empty projects',
      build: () => projectsBloc,
      act: (bloc) => bloc.add(const ProjectsEvent.fetchProjects()),
      wait: const Duration(milliseconds: 2000),
      expect: () => [
        const ProjectsState.loading(),
        const ProjectsState.succes([]),
      ],
    );
Run Code Online (Sandbox Code Playgroud)

如果我不使用等待选项,测试将失败,因为 act 事件将花费 1 秒。使用 wait 我可以确保我们等待足够长的时间,这样测试就可以了。这看起来有点不确定..所以我的问题是,有没有办法删除等待选项并简单地等待直到处理给定的事件?

Swa*_*ERA 0

我遇到了同样的问题,我没有通过 bloc 找到解决方案,但我能够修改我的代码以这种方式定位它,并且它允许我的测试通过。

之前(测试未通过)

final product = await _addProductUseCase.retrieveProduct(param);
final photo = await _addProductUseCase.retrieveProductPhoto(param);
Run Code Online (Sandbox Code Playgroud)

之后(测试通过)

final futures = await Future.wait([
      _addProductUseCase.retrieveProduct(param),
      _addProductUseCase.retrieveProductPhoto(param),
]);
Run Code Online (Sandbox Code Playgroud)