web-dev-qa-db-ja.com

Flutter統合テストでのスタブ/モックREST API呼び出しの最適

私はユーザーがログインした後にデータを表示するフラッタアプリを持っています。私はユニットとウィジェットのテストを持っています、そして今、私の最初の 統合 /エンドツーエンドテストを書いてみたいです。 'ユーザーがログインしてデータを表示するワークフロー。

アプリがログインAPIを呼び出すとき(GET LOGIN_API_PATH)サーバーに実際の要求をするのではなく、画面上に表示するものについて定義済みのJSONを返します。

これは賢明なアプローチです、そしてそれでもこれを行うための最良の方法は何ですか?私が見つけたほとんどのリソースは具体的に単体テストのためでした。

7
alichur

これが私が一緒に行ったアプローチです:

DART HTTP MockClientを使用するモッククライアントを作成します。

import 'package:http/testing.Dart';
import 'package:http/http.Dart';

MockClient integrationTestMockClient = MockClient((request) async {
  switch (request.url.toString()) {
    case 'https://staging.company.com/api/customer/123':
      return Response('{"customer": "123", "name": "Jane Jimmy"}', 200);
    case 'https://staging.company.com/api/customer/155':
      return Response('{"customer": "155", "name": "Gregor"}', 200);
  }
}
 _

これで、統合テストでアプリを起動すると、あなたのアプリにMockクライアントを渡す必要があります。 test_driver/app.Dart _

import 'mock_client.Dart';

void main() async {
  enableFlutterDriverExtension();
  final app = await initializeApp(
    integrationMockClient,
  );
  runApp(app);
}
 _

アプリが起動すると、クライアントを注入することができるように、テスト以外のコードをリファクタリングする必要があるかもしれません。テスト時に実際のクライアントまたはモッククライアントのいずれか。

import 'package:http/http.Dart';

void main() => initializeApp(Client());
 _
2
alichur