在 Flutter 测试中从文件中读取资源
Reading a resource from a file in a Flutter test
我想从 Flutter 单元测试中读取包含一些测试数据的文件。有推荐的方法吗?我尝试了 resource 包,但会引发错误:
dart:isolate Isolate.resolvePackageUri
package:resource/src/resolve.dart 11:20 resolveUri
package:resource/src/resource.dart 74:21 Resource.readAsString
Unsupported operation: Isolate.resolvePackageUri
您不需要安装包,只需使用 dart:io
中的文件
我将所有测试数据文件存储在 "fixtures" 文件夹中。此文件夹包含一个包含以下代码的文件。
import 'dart:async';
import 'dart:io';
Future<File> fixture(String name) async => File('test/fixtures/$name');
在测试中,我在测试开始时加载我的文件
final File myTestFile = await fixture(tFileName);
或者在这个例子中的模拟声明中
when(mockImageLocalDataSource.getImage(any))
.thenAnswer((_) async => Right(await fixture(tFileName)));
最后我使用了以下技巧(唉,我不记得我在哪里看到它建议正确归属)来扫描文件系统树以找到项目根目录。这样,无论从哪个目录执行测试,测试都可以找到数据(否则我的测试在命令行上通过,但在 Android Studio 中失败)。
/// Get a stable path to a test resource by scanning up to the project root.
Future<File> getProjectFile(String path) async {
var dir = Directory.current;
while (!await dir.list().any((entity) => entity.path.endsWith('pubspec.yaml'))) {
dir = dir.parent;
}
return File('${dir.path}/$path');
}
我想从 Flutter 单元测试中读取包含一些测试数据的文件。有推荐的方法吗?我尝试了 resource 包,但会引发错误:
dart:isolate Isolate.resolvePackageUri
package:resource/src/resolve.dart 11:20 resolveUri
package:resource/src/resource.dart 74:21 Resource.readAsString
Unsupported operation: Isolate.resolvePackageUri
您不需要安装包,只需使用 dart:io
中的文件我将所有测试数据文件存储在 "fixtures" 文件夹中。此文件夹包含一个包含以下代码的文件。
import 'dart:async';
import 'dart:io';
Future<File> fixture(String name) async => File('test/fixtures/$name');
在测试中,我在测试开始时加载我的文件
final File myTestFile = await fixture(tFileName);
或者在这个例子中的模拟声明中
when(mockImageLocalDataSource.getImage(any))
.thenAnswer((_) async => Right(await fixture(tFileName)));
最后我使用了以下技巧(唉,我不记得我在哪里看到它建议正确归属)来扫描文件系统树以找到项目根目录。这样,无论从哪个目录执行测试,测试都可以找到数据(否则我的测试在命令行上通过,但在 Android Studio 中失败)。
/// Get a stable path to a test resource by scanning up to the project root.
Future<File> getProjectFile(String path) async {
var dir = Directory.current;
while (!await dir.list().any((entity) => entity.path.endsWith('pubspec.yaml'))) {
dir = dir.parent;
}
return File('${dir.path}/$path');
}