Я играю с новой библиотекой bloc_test для флаттера и реализовал следующий тест
blocTest('should return ReservationsLoadSucess when the use case returns a list of reservationsList',
build: () {
when(mockGetReservations(any)).thenAnswer((_) async => Right(reservationsList));
return ReservationBloc(getReservations: mockGetReservations);
},
act: (bloc) async {
bloc.add(ReservationsRequested(user));
},
expect: [
ReservationsInitial(),
ReservationsLoadInProgress(),
ReservationsLoadSuccess(reservationsList),
],
);
Это реализация ReservationsLoadSuccess
class ReservationsLoadSuccess extends ReservationState {
final List<Reservation> list;
ReservationsLoadSuccess(this.list);
@override
List<Object> get props => [list];
}
Если ReservationState расширяет Equatable Now, при запуске теста вы получаете следующую ошибку
should return ReservationsLoadSucess when the use case returns a list of reservationsList:
ERROR: Expected: [
ReservationsInitial:ReservationsInitial,
ReservationsLoadInProgress:ReservationsLoadInProgress,
ReservationsLoadSuccess:ReservationsLoadSuccess
]
Actual: [
ReservationsInitial:ReservationsInitial,
ReservationsLoadInProgress:ReservationsLoadInProgress,
ReservationsLoadSuccess:ReservationsLoadSuccess
]
Which: was ReservationsLoadSuccess:<ReservationsLoadSuccess> instead of ReservationsLoadSuccess:<ReservationsLoadSuccess> at location [2]
В основном говоря, что состояние ReservationsLoadSuccess в позиции 2 в фактическом списке не равно его одноранговому элементу в ожидаемом списке.
Я попытался переопределить оператор == в классе ReservationsLoadSuccess следующим образом
class ReservationsLoadSuccess extends ReservationState {
final List<Reservation> list;
ReservationsLoadSuccess(this.list);
final Function eq = const ListEquality().equals;
@override
List<Object> get props => [];
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ReservationsLoadSuccess &&
runtimeType == other.runtimeType &&
eq(list, other.list);
}
Но это, похоже, не сработало, и запуск теста по-прежнему выдавал ту же ошибку. Единственный способ заставить его работать - оставить метод props, возвращающий пустой список или добавив любую другую фиктивную переменную, и передать его в список props.
Есть ли способ сделать класс равным по параметру списка?