개요
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
해결 방법
이 문제를 해결하기 위해서는 Response
를 http.Response.bytes
와 utf8.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
에러가 발생하면, 이번 블로그 포스트를 참고하여 해결해보시기 바랍니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.