簡體   English   中英

如何使用 bloc_test 測試 state class 中的吸氣劑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM