Mot*_*tov 1 flutter flutter-test flutter-bloc
我正在使用 flutter_bloc 库并尝试进行单元测试。我正在按照本教程中的说明进行操作,并且效果很好。
但是,如果扩展 Equatable(必需)的 BlocState 具有扩展 Equatable 的许多属性或大型项目列表,以及根据需要定义的 props[] 。
这使得expectLater()匹配正确的发出状态变得困难,因为它试图将确切的实例与其内容匹配,而不仅仅是状态类型或实例。
例如:
考虑以下 State 类:
class BlocState extends Equatable{
final List<String> data;
BlocState({this.data});
@override
List<Object> get props => [data];
}
Run Code Online (Sandbox Code Playgroud)
然后对于这样的发射状态:
List<String> data = ['Mark', 'Mike', 'John']
BlocState({data: data});
Run Code Online (Sandbox Code Playgroud)
这个expectLater会失败
expectLater(
bloc,
emitsInOrder([BlocState(),]), //This will fail as the state does't equals exactly to the real state
)
Run Code Online (Sandbox Code Playgroud)
这一个将会通过:
expectLater(
bloc,
emitsInOrder([BlocState(data: ['Mark', 'Mike', 'John']),]), //This will pass
)
Run Code Online (Sandbox Code Playgroud)
在如此简单的状态下,验证确切的内容是可以的,但如果列表有 100 个项目,如何测试呢?
有没有办法只验证实例类型而不验证内容?
我不确定这是否是你的意思,但你可以这样做:
List<String> myData = ['Mark', 'Mike', 'John', 'AddAsManyAsYouLike'];
bloc.add(SomeEvent());
expectLater(
bloc,
emitsInOrder([BlocState(data: myData)])
)
Run Code Online (Sandbox Code Playgroud)
或者,如果您只关心可以使用的正确类型isA<>()
expectLater(
bloc,
emitsInOrder([isA<BlocState>()])
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1956 次 |
| 最近记录: |