[英]Bad state: A test tried to use any or captureAny on a parameter of type T State using bloc_test and mocktail
[英]How to test getters in a state class using bloc_test?
假设我有一个 state class
class MyState extends Equatable {
final bool isSaving;
final String errorMsg;
const MyState({
this.isSaving = false,
this.errorMsg = '',
});
@override
List<Object?> get props => [
isSaving,
errorMsg,
];
MyState copyWith({
bool? isSaving,
String? errorMsg,
}) {
return MyState(
isSaving: isSaving ?? this.isSaving,
errorMsg: errorMsg ?? this.errorMsg,
);
}
bool get canProceed => !isSaving && errorMsg.isEmpty;
}
在我的blocTest
我可以做
blocTest(
'canProceed is true',
build: () => MyCubit(),
act: (MyCubit c) => c.doSomething(),
expect: () => [
MyState(isSaving: false, errorMsg: ''),
],
);
但是我想做一些类似的事情
blocTest(
'canProceed is true',
build: () => MyCubit(),
act: (MyCubit c) => c.doSomething(),
expect: (MyCubit c) => [c.canProceed],
);
有没有办法做到这一点? getter 变得越复杂,第一个示例就越乏味,尤其是在调用doSomething()
后发出多个状态时。
如果你想测试一个 getter,你不需要作为 BLoC 执行测试 - 只需创建一个特定的 state 实例并检查 getter 返回的值:
group('canProceed', () {
group('when isSaving = false and errorMsg is empty', () {
test('returns true', () {
final state = MyState(isSaving: false, errorMsg: '');
expect(state.canProceed, isTrue);
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.