概要
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));
今回のブログポストではn日本語が含まれた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で開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。