[Flutter] httpテストでContains invalid charactersエラー解決方法

[Flutter] httpテストでContains invalid charactersエラー解決方法

2023-09-01 hit count image

Flutterでhttpパッケージをテストする際に、Contains invalid charactersエラーが発生する場合解決する方法について説明します。

概要

FlutterAPI通信にhttpパッケージを使います。Flutterhttpパッケージを使って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

解決方法

この問題を解決するためには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));

このようにテストコードを修正して実行すると、以前とは違って問題なくテストコードが実行されることが確認できます。

完了

今回のブログポストではFlutterhttpパッケージを使って実装したコードをテストする時、たまに発生するContains invalid charactersエラーを解決する方法について見てみました。皆さんもContains invalid charactersエラーが発生する場合は、このブログポストを参考して解決してみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts