[Flutter] http 테스트에서 Contains invalid characters 에러 해결 방법

[Flutter] http 테스트에서 Contains invalid characters 에러 해결 방법

2023-09-01 hit count image

Flutter에서 http 패키지를 테스트할 때, Contains invalid characters 에러가 발생하는 경우 해결 방법에 대해서 알아보도록 하겠습니다.

개요

Flutter에서 API 통신에 http 패키지를 사용합니다. Flutter에서 http 패키지를 사용하여 API를 호출하는 방법에 대해서는 아래 링크를 참고하시기 바랍니다.

이렇게 http 패키지로 구현한 코드를 테스트할 때, 종종 Contains invalid characters 에러가 발생하곤 합니다. 이번 블로그 포스트스에서는 http 패키지로 구현한 코드를 테스트할 때 발생하는 Contains invalid characters 에러를 해결하는 방법에 대해서 알아보도록 하겠습니다.

Contains invalid characters 에러

테스트 코드를 작성할 때, 다음과 같이 영어가 아닌 언어를 Resposne로 사용할 때, Contains invalid characters 에러가 발생합니다.

when(mockHttpClient.post(
  Uri.parse('${ENV.apiServer}/api/logout'),
  headers: anyNamed('headers'),
)).thenAnswer((_) async => http.Response('''{
    "success": true,
    "data": {
      "message": "ログアウトしました。"
    },
    "errors": null
  }''', 200));

이번 블로그 포스트에서는 일본어가 포함된 Response를 반환하였습니다. 이 테스트 코드를 실행하면 다음과 같이 Contains invalid characters 에러가 발생하는 것을 확인할 수 있습니다.

 Invalid argument (string): Contains invalid characters.: "{\n          \"success\": true,\n          \"data\": {\n            \"message\": \"ログアウトしました。\"\n          },\n          \"errors\": null\n        }"
  dart:convert                                    Latin1Codec.encode
  package:http/src/response.dart 37:49            new Response

해결 방법

이 문제를 해결하기 위해서는 Responsehttp.Response.bytesutf8.encode를 사용하여 다음과 같이 Encoding할 필요가 있습니다.

when(mockHttpClient.post(
  Uri.parse('${ENV.apiServer}/api/logout'),
  headers: anyNamed('headers'),
)).thenAnswer((_) async => http.Response.bytes(utf8.encode('''{
    "success": true,
    "data": {
      "message": "ログアウトしました。"
    },
    "errors": null
  }'''), 200));

이렇게 테스트 코드를 수정하고 실행하면, 이전과는 다르게 문제없이 테스트 코드가 실행되는 것을 확인할 수 있습니다.

완료

이번 블로그 포스트에서는 Flutter에서 http 패키지를 사용하여 구현한 코드를 테스트할 때, 종종 발생하는 Contains invalid characters 에러를 해결하는 방법에 대해서 알아보았습니다. 여러분도 Contains invalid characters 에러가 발생하면, 이번 블로그 포스트를 참고하여 해결해보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

스무디 한 잔 마시며 끝내는 React Native 책을 출판한지 벌써 2년이 다되었네요.
이번에도 좋은 기회가 있어서 스무디 한 잔 마시며 끝내는 리액트 + TDD 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts