flutter - Dart / Flutter测试肘,比较预期和实际的问题
问题描述
我正在使用 WeatherAPI 开发一个应用程序。我目前无法实施一些工作测试。我尝试遵循 ResoCoders 指南(https://resocoder.com/2019/11/29/bloc-test-tutorial-easier-way-to-test-blocs-in-dart-flutter/)并实际实现了所有状态, blocs(我用 Cubit 代替)、类、函数……几乎相同。
这是我的测试代码:
blocTest<WeatherCubit, WeatherBaseState>(
'Cubit emits WeatherLoaded',
build: () {
return WeatherCubit(weatherRepository: mockWeatherRepository);
},
act: (WeatherCubit cubit) => cubit.getWeather(),
expect: () => [
WeatherLoaded(
temperature: temperature,
...
lat: lat,
lon: lon)
],
);
这就是我从调试控制台得到的错误消息:
Expected: [Instance of 'WeatherLoaded']
Actual: [Instance of 'WeatherLoaded']
Which: at location [0] is <Instance of 'WeatherLoaded'> instead of <Instance of 'WeatherLoaded'>
WARNING: Please ensure state instances extend Equatable, override == and hashCode, or implement Comparable.
Alternatively, consider using Matchers in the expect of the blocTest rather than concrete state instances.
我尝试使用 Matcher,但不太了解如何使用它。
如果问题出在这里,我的 WeatherCubit 实现:
class WeatherCubit extends Cubit<WeatherBaseState> {
final IWeatherRepository weatherRepository; //IWeatherRepository is interface
WeatherCubit({required this.weatherRepository})
: super(LoadingWeather()); // I use LoadingWeather as initial state
Future<void> getWeather() async {
final Position location = await weatherRepository.determinePosition();
final WeatherData data = await weatherRepository.getWeather(
lat: location.latitude,
lon: location.longitude);
final WeatherLoaded weatherLoaded = WeatherLoaded(
temperature: data.temperature,
...
lat: data.lat,
lon: data.lon);
emit(weatherLoaded);
}
}
解决方案
推荐阅读
- powershell - Powershell Write-Error Write-Warning 自定义格式
- scala - scala中的List[Row]到RDD[CassandrRow]转换
- php - 如何将 PHP 父对象转换/转换为子对象?
- javascript - 使用 javascript 或 jquery 获取数组中的复选框状态
- node.js - 节点无法连接到流浪盒
- ios - 获取结构中嵌套对象的路径
- ssis - 如何为每一行创建一个字段并在每个转换级别中附加一些文本
- r - 根据开始/结束列每月“拆分”数据帧
- java - 当缺少两个重要变量时,如何将对象作为参数提供给对象?
- testing - 共享步骤的 TFS 测试中的不同参数