【问题标题】:Testing the bloc state will pass even if some properties are not the same即使某些属性不相同,测试 bloc 状态也会通过
【发布时间】:2020-01-06 09:41:18
【问题描述】:

这是mapEventToState 中的MyBloc

@override
  Stream<MyBlocState> mapEventToState(MyBlocEvent event) async* {
    if (event is MyBlocInitialize) {
      yield MyBlocStateInitialized(event.something);
    }

状态的定义如下:

abstract class MyBlocState extends Equatable {
  EnterCredentialsState([List props = const []]) : super(props)
}

class MyBlocStateInitialized extends MyBlocState {
  final String _something;
  MyBlocStateInitialized(this._something);}

事件如下:

abstract class MyBlocEvent {}

class MyBlocEventInizialize extends MyBlocEvent{
  final string something;
  MyBlocEventInitialize(this.something);
}

现在,这是我的测试:

test('Should return MyBlocInitialized with a defined String', () {
    String _somethingString = 'Something';

expectLater(
_myBloc.state,emitsInOrder([
          MyBlocsStateUninitialized(),
          MyBlocStateInitialized(_somethingString)
        ]));

    _myBloc.dispatch(MyBlocEventInitialize(_somethingString);
}

这个测试的问题是它只会检查 bloc 是否会产生 MyBlocsStateUninitializedMyBlocStateInitialized,但不会检查 MyBlocStateInitialized 中的字符串。其实我也可以换

expectLater(
_myBloc.state,emitsInOrder([
          MyBlocsStateUninitialized(),
          MyBlocInitialized('WRONG')
        ]));

    _myBloc.dispatch(MyBlocEventInitialize(_somethingString);
}

它仍然会通过。

【问题讨论】:

    标签: testing flutter dart bloc


    【解决方案1】:

    每当你的状态有一个类似的参数时,你必须将它传递给父构造函数 - Equatable - 就像你对 MyBlocState 所做的那样,否则它将用一个空列表初始化,你会收到一个 false比较是肯定的。

    来自平等的

    构造函数采用props(属性)的可选[List],用于确定两个[Equatables] 是否相等。 如果没有提供任何属性,props 将被初始化为一个空的 [List]。

    abstract class MyBlocState extends Equatable {
      EnterCredentialsState([List props = const []]) : super(props)
    }
    
    class MyBlocStateInitialized extends MyBlocState {
      MyBlocStateInitialized(this._something): super([_something]);
      final String _something;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 2021-07-20
      • 1970-01-01
      • 2019-04-25
      • 2013-09-15
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多