Zesměšňovat Dio nefunguje testovat své aplikace v Flutter

0

Otázka

Snažím se psát unit testy na mou žádost s Dio, ale jsem stále tuto chybu: typ "Null" není podtyp typu 'BaseOptions'

Snažil jsem se přidat základní možnosti na DioMock v mnoha různými způsoby, ale test je stále stejný. Jak to mohu opravit?

Níže jsou mé Sítě třídy a testovací třídy.

class NetworkService {

  final Dio dio;

  NetworkService(this.dio){
    dio.options.baseUrl = "https://food2fork.ca/api/recipe/search";
    dio.options.headers['Authorization'] = 'Token 9c8b06d329136da358c2d00e76946b0111ce2c48';

    dio.interceptors.add(InterceptorsWrapper(
      onRequest: (options, handler){
        print('base ${options.baseUrl}');
        print("PATH: ${options.path}");
        return handler.next(options);
      },
      onResponse: (response, handler){
        print("RESPONSE: ${response.statusCode}  PATH: ${response.requestOptions.path}");
    return handler.next(response);
    },
      onError: (DioError e, handler){
        print("ERROR: ${e.response?.statusCode} => PATH: ${e.requestOptions.path}");
        return handler.next(e);
      }
    ));
  }

  Future<List<Recipe>> getRecipe() async {
    var response = await dio.get('/?page=1&query=beef');
    print("response ${response.data}");
    if(response.statusCode == 200){
      final List<Recipe> recipeList = [];
      for(Map<String, dynamic> recipe in response.data['results']){
        recipeList.add(Recipe.fromJson(recipe));
      }
      return recipeList;
    } else {
      throw Exception('sss');
    }

  // ONBOARDING
  }
}
class DioMock extends Mock implements DioForNative {}

class RecipeMock extends Mock implements Recipe {}

main() {

  final dio = DioMock();

  final service = NetworkService(dio);

  dio.options.baseUrl = "https://food2fork.ca/api/recipe/search";
  dio.options.headers =  { 'Content-type': 'application/json', 'Accept': 'application/json' };

  test("should return Onboarding Model", () async {
    final response = Response(
        requestOptions: RequestOptions(
            path: 'gfh',
          baseUrl: "fgh"
        ),
        data: RecipeMock()

    );
    when(dio.get(
        "https://food2fork.ca/api/recipe/search"))
        .thenAnswer((_) async => response);

    final result = await service.getRecipe();
    expect(result, isA<Recipe>());

  });
}
dart dio flutter mockito
2021-11-21 19:00:22
1

Nejlepší odpověď

1

Byste měli použít https://pub.dev/packages/http_mock_adapter balíček pomoci pro srandu DIO žádosti

Viz jeho příklad https://github.com/lomsa-dev/http-mock-adapter/blob/main/example/main.dart :

void main() async {
  late Dio dio;
  late DioAdapter dioAdapter;

  Response<dynamic> response;

  group('Accounts', () {
    const baseUrl = 'https://example.com';

    const userCredentials = <String, dynamic>{
      'email': '[email protected]',
      'password': 'password',
    };

    setUp(() {
      dio = Dio(BaseOptions(baseUrl: baseUrl));
      dioAdapter = DioAdapter(dio: dio);
    });

    test('signs up user', () async {
      const route = '/signup';

      dioAdapter.onPost(
        route,
        (server) => server.reply(201, null),
        data: userCredentials,
      );

      // Returns a response with 201 Created success status response code.
      response = await dio.post(route, data: userCredentials);

      expect(response.statusCode, 201);
    });

...

  final dioError = DioError(
    error: {'message': 'Some beautiful error!'},
    requestOptions: RequestOptions(path: path),
    response: Response(
      statusCode: 500,
      requestOptions: RequestOptions(path: path),
    ),
    type: DioErrorType.response,
  );

  test("should return a DioError", () async {
    dioAdapter.onGet(
        path,
            (server) {
          server.throws(404, dioError );
        });
    final result = await service.getOnboardingAnswer("lastAnswerId");
    expect(result, throwsA(isA<DioError>()));
  });
}
  });
2021-11-28 22:22:01

Skvělé, to fungovalo pro 200 statusCode ale když jsem hodit DioError nemůžu se očekávat, že práce, je to jen výjimku. Upravil jsem otázku s tímto testem
Henrique Tavolaro

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................