ошибка утверждения http-mock-adapter Dio: «Не удалось найти запрос на сопоставление с поддельным маршрутом для

#flutter #unit-testing #dart #dio

Вопрос:

Я пытаюсь издеваться над моим клиентом Dio с помощью http-mock-adapter при использовании метода put и метода error, но я получаю эти ошибки:

Исключение: ошибка утверждения: «Не удалось найти запрос на сопоставление с поддельным маршрутом для POST / onboard / answer { data: {«pageId»:»1″},

Исключение: ошибка DioError [DioErrorType.response]: {сообщение: какая-то красивая ошибка!}

Я обнаружил эту проблему https://githubmemory.com/repo/lomsa-dev/http-mock-adapter/issues/96?page=2 но я не решил свою проблему. Ниже приведен код

 main() {
  final dio = Dio(BaseOptions());
  final dioAdapter = DioAdapter(dio: dio);
  dio.httpClientAdapter = dioAdapter;

  final service = NetworkService(dio);

  test("should return a DioError", () async {
    const path = "/onboard/page-date/0/lastAnswerId";
    final dioError = DioError(
      error: {'message': 'Some beautiful error!'},
      requestOptions: RequestOptions(path: path),
      response: Response(
        statusCode: 404,
        requestOptions: RequestOptions(path: path),
      ),
      type: DioErrorType.response,
    );
    dioAdapter.onGet(path, (server) {
      server.throws(404, dioError);
    });
    final result = await service.getOnboardingAnswer("lastAnswerId");
    expect(result, isA<OnboardModel>());
  });


  final answerModel = AnswerModel(pageId: "1");

  test("should return 200", () async {
    const path = "/onboard/answer";
    dioAdapter.onPost(path, (server) {
      server.reply(200, 200);
    });
    final result = await service.postOnboardingAnswer(answerModel);
    expect(result, isA<int>());
  });
 

Ответ №1:

У меня была такая же проблема. Сбой Dio, поскольку он пытается сопоставить маршрут с точной полезной нагрузкой данных, которую вы отправляете.

Если вас не волнуют фактические отправляемые данные, вы можете использовать Matchers.any из http-mock-adapter библиотеки:

 dioAdapter.onPost(url, (server) {
  server.reply(200, 200);
}, data: Matchers.any);