【问题标题】:How best to stub/mock rest API calls in Flutter Integration tests如何在 Flutter 集成测试中最好地存根/模拟 rest API 调用
【发布时间】:2019-08-04 05:11:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: dart flutter flutter-test


    【解决方案1】:

    这是我采用的方法:

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

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

    import 'package:http/http.dart';
    
    void main() => initializeApp(Client());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      相关资源
      最近更新 更多