Flutter 集成测试 - 如何加载 JSON 文件?

ali*_*hur 6 flutter flutter-test

我正在使用模拟客户端编写 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);
Run Code Online (Sandbox Code Playgroud)

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

void main() async {
  enableFlutterDriverExtension();
  final app = await initializeApp(
    integrationMockClient
  );
  runApp(app);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Oma*_*att 0

我在访问用于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);
});
Run Code Online (Sandbox Code Playgroud)