![](/img/trans.png)
[英]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.