【发布时间】:2021-01-10 23:01:28
【问题描述】:
当我正常运行我的应用程序时,我执行cubit.getWeather('London') 并且weatherLoading 状态发出,然后weatherLoaded 状态正确发出。
但是,当我为 cubit 运行测试以测试 cubit.getWeather('London') 时,weatherLoading 状态并未发出 - 它直接跳转到 weatherLoaded 状态。
为什么会这样?
状态:
@freezed
abstract class WeatherState with _$WeatherState {
factory WeatherState.weatherInitial() = WeatherInitial;
factory WeatherState.weatherLoading() = WeatherLoading;
factory WeatherState.weatherLoaded(Weather weather) = WeatherLoaded;
factory WeatherState.weatherError(String message) = WeatherError;
}
肘:
class WeatherCubit extends Cubit<WeatherState> {
final WeatherRepository _weatherRepository;
static Weather weather;
WeatherCubit(this._weatherRepository) : super(WeatherState.weatherInitial());
Future<void> getWeather(String cityName) async {
emit(WeatherState.weatherLoading());
try {
final weather = await _weatherRepository.fetchWeather(cityName);
emit(WeatherState.weatherLoaded(weather));
} on NetworkException {
emit(WeatherState.weatherError("Network error"));
}
}
}
我的天气存储库类有'Future<Weather> fetchWeather(String cityname){...}' 方法。
最后,我的测试:
class MockWeatherRepository extends Mock implements WeatherRepository {}
void main() {
MockWeatherRepository mockWeatherRepository;
WeatherCubit cubit;
final weather = Weather(cityName: 'London', temperatureCelsius: 7);
setUp(() {
mockWeatherRepository = MockWeatherRepository();
when(mockWeatherRepository.fetchWeather(any))
.thenAnswer((_) async => weather);
cubit = WeatherCubit(mockWeatherRepository);
});
test(
'emits [WeatherLoading, WeatherLoaded] when successful',
() async {
cubit.getWeather('London');
await expectLater(
cubit,
emitsInOrder([ //Fails
WeatherState.weatherLoading(),
WeatherState.weatherLoaded(weather),
]),
);
},
);
}
【问题讨论】:
-
我遇到了完全相同的问题,并且无法找出为什么 emitsinorder 只跟踪最后一次发射。当我调试时,我可以看到他发出了其他状态。
标签: flutter dart bloc flutter-test