dart - 如何在 Flutter 集成测试中最好地 stub /模拟 rest API 调用

标签 dart flutter flutter-test

我有一个 Flutter 应用程序,它在用户登录后显示数据。 我有单元和小部件测试,现在想写我的第一个 Integration/端到端测试,用于测试用户登录并查看数据的整个“快乐路径”工作流。

当应用调用登录 API (GET login_api_path) 时,我想返回一些预定义的 JSON 以显示在屏幕上,而不是向服务器发出真正的请求。

这是一种明智的做法吗?如果是,最好的做法是什么?我发现的大多数资源都是专门用于单元测试的。

最佳答案

这是我采用的方法:

创建一个使用 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);
  }
}

现在,当您在集成测试中启动您的应用程序时,您需要将您的模拟客户端传递到您的应用程序中,例如test_driver/app.dart

import 'mock_client.dart';

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

您可能需要重构非测试代码,以便在应用启动时注入(inject)客户端。测试时可以是真实客户端,也可以是模拟客户端。

import 'package:http/http.dart';

void main() => initializeApp(Client());

关于dart - 如何在 Flutter 集成测试中最好地 stub /模拟 rest API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143353/

相关文章:

flutter - 如何以编程方式打开键盘文本字段

Flutter:RenderObject 是否在 StatefulWidget 的生命周期内重新创建?

flutter - Flutter 中的 Invisibility , Gone ,可见性 ROW 和 Column

flutter - 我怎样才能在 flutter 中删除这个底部导航栏上的白色背景

flutter - ClipPath

flutter 动画启动画面 (gif)

unit-testing - 带有服务器回调的 http 的 Flutter dart 测试

flutter - 如果语句在我的 Dart Flutter 代码中被注册为变量?我该如何改变?

json - 无法从 flutter 中的 jsonDecoded 变量中提取 key

dart - 如何将一个angular2-dart包中的组件导入到另一个angular2-dart包中