首页 > 解决方案 > Flutter 集成测试——如何加载 JSON 文件?

问题描述

我正在使用模拟客户端编写 Flutter 集成测试,该客户端为我的应用程序调用的每个 REST 端点返回 JSON 响应。这些 JSON 响应存储在单独的 JSON 文件中,但在测试运行时我无法访问这些文件。

我尝试通过创建和读取新文件对象来加载文件。Flutter:如何加载文件进行测试,但它永远找不到文件。我还尝试将我的 JSON 文件放入资产中。这很有效,但也导致我在构建 APK 时捆绑了测试 JSON 文件。

简化的模拟客户端:

MockClient integrationMockClient = MockClient((request) async {
  switch (request.url.toString()) {
    case 'https://staging.company.com/api/123':
      return Response(readJsonfile('myJsonFile.json'), 200);

简化集成测试主要功能 - 传入模拟客户端。test_driver/app.dart

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

当我尝试读取文件时,它永远找不到它。可能是因为 flutterDriver 运行“真实应用程序”而无法访问存储在测试目录中的文件。

如何从集成测试访问 JSON 文件而不将其捆绑在生产代码/APK 中?

标签: flutterflutter-test

解决方案


flutter driver我在使用集成测试访问文件资源时遇到了类似的问题。我作为解决方法所做的是直接解析 JSON 响应,而不是将 JSON 响应存储为文件。

这是您可以尝试的示例。这使用https://jsonplaceholder.typicode.com作为其端点示例。

test('Test http', () async {
    final file = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/albums/1'));
  final json = jsonDecode(file.body.toString());
  print('json contents: $json');
  print('userId: ${json['userId']}');
  final userId = json['userId'];
  expect(userId, 1);
});

推荐阅读