blocTest 错误:没有从 `when()` 中调用任何方法存根

问题描述 投票:0回答:1

我正在使用无酒精鸡尾酒包。我在嘲笑 WeatherRepository 。所以我不太明白这个错误是什么。请找到以下附件代码

导入“包:weather_app/data/data_provider/weather_data_provider.dart”; 导入'包:weather_app/models/weather_model.dart';

存储库:

class WeatherRepository {
  final WeatherDataProvider weatherDataProvider;
  WeatherRepository(this.weatherDataProvider);

  Future<WeatherModel> getCurrentWeather(String cityName) async {
    try {
      final weatherData = await weatherDataProvider.getCurrentWeather(cityName);

      final data = jsonDecode(weatherData);

      if (data['cod'] != '200') {
        throw 'An unexpected error occurred';
      }

      return WeatherModel.fromMap(data);
    } catch (e) {
      throw e.toString();
    }
  }
}

测试:

import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:weather_app/bloc/weather_bloc.dart';
import 'package:weather_app/data/data_provider/weather_data_provider.dart';
import 'package:weather_app/data/repository/weather_repository.dart';
import 'package:weather_app/models/weather_model.dart';
import 'package:bloc_test/bloc_test.dart';

class MockWeatherRepository extends Mock implements WeatherRepository {}

void main() {
  late WeatherDataProvider mockweatherDataProvider;
  late WeatherRepository mockWeatherRepository;

  setUp(() {
    mockweatherDataProvider = WeatherDataProvider();
    mockWeatherRepository = WeatherRepository(mockweatherDataProvider);
  });

  String cityName = "New Delhi";
  WeatherModel weather = WeatherModel(
      currentTemp: 20.0,
      currentSky: 'Rain',
      currentPressure: 10,
      currentWindSpeed: 20.0,
      currentHumidity: 10);

  blocTest(
    'Get weather',
    build: () {
      when(() => mockWeatherRepository.getCurrentWeather(cityName))
          .thenAnswer((_) async => weather);

      return WeatherBloc(mockWeatherRepository);
    },
    act: (bloc) => bloc.add(WeatherFetched()),
    expect: () => [
      isA<WeatherLoading>(),
      isA<WeatherSuccess>()
    ],
  );
}

错误:

Bad state: No method stub was called from within `when()`. Was a real method called, or perhaps an extension method?
package:mocktail/src/mocktail.dart 262:7     When._completeWhen
package:mocktail/src/mocktail.dart 257:12    When.thenAnswer
test/bloc/weather_bloc_test.dart 55:12       main.<fn>
package:bloc_test/src/bloc_test.dart 203:25  testBloc.<fn>
===== asynchronous gap ===========================
dart:async                                   _Completer.completeError
package:bloc_test/src/bloc_test.dart 257:43  _runZonedGuarded.<fn>
===== asynchronous gap ===========================
dart:async                                   _CustomZone.registerBinaryCallback
package:bloc_test/src/bloc_test.dart 254:5   _runZonedGuarded.<fn>
dart:async                                   runZonedGuarded
package:bloc_test/src/bloc_test.dart 253:3   _runZonedGuarded
package:bloc_test/src/bloc_test.dart 200:11  testBloc
package:bloc_test/src/bloc_test.dart 156:13  blocTest.<fn>

flutter bloc-test
1个回答
0
投票

问题在于mockWeatherRepository 实例化:

late WeatherRepository mockWeatherRepository;
mockWeatherRepository = WeatherRepository(mockweatherDataProvider);

mockWeatherRepository 没有被实例化为

MockWeatherRepository
的实例,而是
WeatherRepository
的实例。

when() 无法调用存根方法

getCurrentWeather

尝试改变

mockWeatherRepository = WeatherRepository(mockweatherDataProvider);

mockWeatherRepository = MockWeatherRepository();
© www.soinside.com 2019 - 2024. All rights reserved.