flutter - 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 中?
解决方案
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);
});
推荐阅读
- java - 如何使用 for(int i = 10; i >= 5; ++i) {
- go - Golang Lambda 函数确定来源
- python - 遍历字典并更新数据框值
- javascript - 需要帮助使用 Gatsby.js 实现 react-hook-form:表单甚至不会将值发布到控制台
- c# - connectionString 中的错误:不支持关键字:“数据源”C# MVC web.config
- javascript - JavaScript,订购对象的功能
- java - 防止在 Spring Boot api 中下载文件
- codeigniter - Codeigniter 重定向组中的所有路由
- c++ - 编写一个程序,使用内置函数和用户定义函数计算 sin(x) 的值
- javascript - MongoDB 通过元素编号修改对象字段的数组,无需 findAndModify 或更新查询