Почему во время теста не срабатывает одно из моих состояний - PullRequest
0 голосов
/ 07 мая 2020

Я следил за кодом Reso на YouTube, чтобы создать небольшое погодное приложение, но я использовал последнюю версию библиотеки blo c и flutter_blo c 4.0.

Базовое приложение: https://www.youtube.com/watch?v=hTExlt1nJZI&list=PLB6lc7nQ1n4jCBkrirvVGr5b8rC95VAQ5&index=7

BLo c Тест: https://www.youtube.com/watch?v=S6jFBiiP0Mc&list=PLB6lc7nQ1n4jCBkrirvVGr5b8rC95VAQ5&index=8

Первые 2 теста работают. Например, приведенный ниже не дает мне никаких ошибок:

test(
    'NEWER WAY BUT lONG-WINDED emits [WeatherLoading, WeatherLoaded] when successful',
    () {
  when(mockWeatherRepository.fetchWeather(any))
      .thenAnswer((_) async => weather);

  final bloc = WeatherBloc(mockWeatherRepository);

  bloc.add(GetWeather('London'));

  emitsExactly(bloc, [
    WeatherInitial(),
    WeatherLoading(),
    WeatherLoaded(weather),
  ]);
});

По какой-то причине этот тест ниже не запускает WeatherInitial.

blocTest(
  'emits [WeatherLoading, WeatherLoaded] when successful',
  build: () async {
    when(mockWeatherRepository.fetchWeather(any))
        .thenAnswer((_) async => weather);

    return WeatherBloc(mockWeatherRepository);
  },
  act: (bloc) => bloc.add(GetWeather('London')),
  expect: [
    WeatherInitial(),
    WeatherLoading(),
    WeatherLoaded(weather),
  ],
);

Ошибка:

ERROR: Expected: [
        WeatherInitial:WeatherInitial,
        WeatherLoading:WeatherLoading,
        WeatherLoaded:WeatherLoaded
      ]
Actual: [WeatherLoading:WeatherLoading, WeatherLoaded:WeatherLoaded]
Which: was WeatherLoading:<WeatherLoading> instead of WeatherInitial:<WeatherInitial> at location [0]

Знаете почему?

1 Ответ

1 голос
/ 10 июня 2020

Это поведение правильно согласно официальной библиотеке bloc_test :

skip is an optional int which can be used to skip any number of states.
The default value is 1 which skips the initialState of the bloc. 
skip can be overridden to include the initialState by setting skip to 0.

Поэтому, если вы хотите включить свой "InitialState", просто установите значение "skip" на 0:

.
.
.
skip: 0,
expect: [
    WeatherInitial(),
    WeatherLoading(),
    WeatherLoaded(weather),
  ],
...