【问题标题】:Flutter BLoC TestingFlutter BLoC 测试
【发布时间】:2020-09-28 11:53:19
【问题描述】:

我正在使用 flutter_bloc 库并尝试进行单元测试。 我正在按照this tutorial 中的说明进行此操作,并且做得很好。

但是,如果扩展 Equatable(需要)的 BlocState 具有许多扩展 Equatable 的属性或大量项目列表,以及它们的 props[] 定义为需要。

这使得expectLater() 很难匹配正确的发射状态,因为它试图将确切的实例与其内容匹配,而不仅仅是状态类型或实例。

例如:

考虑以下 State 类:

class BlocState extends Equatable{
     final List<String> data;
     BlocState({this.data});

     @override
     List<Object> get props => [data];
}

然后对于像这样的发射状态:

List<String> data = ['Mark', 'Mike', 'John']
BlocState({data: data}); 

这个expectLater会失败

 expectLater(
    bloc,
    emitsInOrder([BlocState(),]), //This will fail as the state does't equals exactly to the real state
  )

这个会通过的:

expectLater(
    bloc,
    emitsInOrder([BlocState(data: ['Mark', 'Mike', 'John']),]), //This will pass 
  )

在这种简单的状态下,可以验证确切的内容,但如果列表将包含 100 个项目,如何对其进行测试?

有没有办法只验证没有内容的实例类型?

【问题讨论】:

    标签: flutter flutter-test flutter-bloc


    【解决方案1】:

    我有点晚了,但我有同样的问题,我发现了这个:

    List<String> myData = ['Mark', 'Mike', 'John', 'AddAsManyAsYouLike'];
    bloc.add(SomeEvent());
    
    expectLater(
        bloc,
        emitsInOrder([
            predicate<BlocState>(
                (state) => 
                    state.oneOfMyProperties == 'expected value' &&
                    state.anotherProperty == 'another expected value'
            )
        ])
    )
    

    【讨论】:

      【解决方案2】:

      我不确定这是否是您的意思,但您可以这样做:

      List<String> myData = ['Mark', 'Mike', 'John', 'AddAsManyAsYouLike'];
      bloc.add(SomeEvent());
      
      expectLater(
          bloc,
          emitsInOrder([BlocState(data: myData)])
      )
      

      或者,如果您只关心正确的类型,您可以使用isA&lt;&gt;()

      expectLater(
          bloc,
          emitsInOrder([isA<BlocState>()])
      )
      

      【讨论】:

      • 谢谢@Er1!您的答案的第一部分适用于 did 中的简单内容,但如果它是 List ,则为它制作 myData 会很麻烦。是的,isA 正是我想要的!再次感谢@Er1。
      猜你喜欢
      • 2023-02-17
      • 2021-03-31
      • 2021-08-13
      • 2021-02-10
      • 2022-01-23
      • 2021-03-19
      • 2021-08-08
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多