【问题标题】:Flutter integration test - how to load a JSON file?Flutter 集成测试——如何加载 JSON 文件?
【发布时间】:2019-08-20 07:25:01
【问题描述】:

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

我尝试通过创建和读取新文件对象来加载文件。 Flutter: how to load file for testing 但它永远找不到文件。 我还尝试将我的 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 中?

【问题讨论】:

  • 找到解决办法了吗?
  • 遗憾的是没有。我通过将 JSON 存储在飞镖字符串 const String successJson = '{"value": 5, "Name": "test"}' 中实现了一个狡猾的解决方法
  • 哈哈,研究失败后我也做了同样的事情:D
  • 在过去 4 个月中是否有任何解决方法,我真的在我正在加载的 JSON 上......?
  • stackoverflow.com/questions/45780255/… 接受的答案在其下方有一个额外的相关答案 stackoverflow.com/a/57086750/6668797,它可能解决“但它永远找不到文件”,除非您更具体到您的问题。

标签: flutter flutter-test


【解决方案1】:

我在使用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);
});

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 2021-06-12
    • 2013-03-18
    • 2020-03-18
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2021-10-19
    相关资源
    最近更新 更多