Testing 颤振:如何加载测试文件
文件可以从相对于dart脚本文件的目录中读取,简单地说就是Testing 颤振:如何加载测试文件,testing,intellij-idea,readfile,flutter,Testing,Intellij Idea,Readfile,Flutter,文件可以从相对于dart脚本文件的目录中读取,简单地说就是var File=new File('./fixture/contacts.json') 但是,在IDE中运行的颤振测试无法读取该文件 (不是,因为我不想在应用程序中捆绑测试数据文件)在测试中也不起作用 在flatter中读取文件的好方法是什么(对于命令行测试和IDE测试) 运行颤振测试非常快。然而,IntellijIDE内部的测试速度非常慢,但它可以设置调试断点并单步执行和查看变量。所以这两种测试都非常有用。刚刚尝试了一下,比您预期的要
var File=new File('./fixture/contacts.json')
但是,在IDE中运行的颤振测试无法读取该文件
(不是,因为我不想在应用程序中捆绑测试数据文件)在测试中也不起作用
在flatter中读取文件的好方法是什么(对于命令行测试和IDE测试)
运行
颤振测试
非常快。然而,IntellijIDE内部的测试速度非常慢,但它可以设置调试断点并单步执行和查看变量。所以这两种测试都非常有用。刚刚尝试了一下,比您预期的要容易
首先,创建一个与测试所在目录相同的文件夹。例如,我创建了一个名为test\u resources的文件夹
然后,假设我们有以下用于测试的JSON文件
测试资源/contacts.json
{
"contacts": [
{
"id": 1,
"name": "Seth Ladd"
},
{
"id": 2,
"name": "Eric Seidel"
}
]
}
测试/加载文件\u测试.dart
我们可以将其用于我们的测试,如下所示:
import 'dart:convert';
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('Load a file', () async {
final file = new File('test_resources/contacts.json');
final json = jsonDecode(await file.readAsString());
final contacts = json['contacts'];
final seth = contacts.first;
expect(seth['id'], 1);
expect(seth['name'], 'Seth Ladd');
final eric = contacts.last;
expect(eric['id'], 2);
expect(eric['name'], 'Eric Seidel');
});
}
您可以使用DefaultAssetBundle
final response=DefaultAssetBundle.of(context.loadString('assets/file_name.json') 我今天遇到了同样的问题。我的测试在IDE(Android Studio)中通过,但在CI上失败。我发现IDE需要一个非相对路径,但是
flattertest
需要一个相对路径。我认为这是一个错误,我将寻找正确的地方报告它。然而,在此期间,我发现了一个粗糙的工作。基本上,我有一个函数,它尝试两种方法来指定文件路径
导入'dart:convert';
导入“dart:io”;
未来parseRawSample(字符串文件路径,
[bool relative=true])异步{
filePath=relative?“测试数据/src/samples/raw/$filePath”:filePath;
字符串jsonString;
试一试{
jsonString=等待文件(filePath).readAsString();
}捕获(e){
jsonString=await File(“../”+filePath).readAsString();
}
返回json.decode(jsonString);
}
大部分代码都是针对我的情况编写的,但我认为其他人可能会根据自己的目的修改这项工作。我创建了一个util,因为vscode和命令行测试基路径是不同的 这就是我使用它的方式
另一种方法是在命令行中指定精确的测试路径
$ flutter test test
您可以将测试文件放在两个地方(我知道在两个地方有相同的数据不是一个好的做法)。假设我想在测试代码中打开data.json文件,使用
final file=file(dataFilename)
,那么dataFilename将是“test\u resources/data.json”。若测试是从Android Studio执行的,则测试资源是项目根目录中的一个文件夹。如果从命令行执行测试,则测试资源是测试文件夹中的一个文件夹。因此,将文件放在两个位置将解决问题。只需从以下位置复制解决方案:
很好 当前目录始终是Flatter 2.0中的项目根目录DefaultAssetBundle未为我定义:/n运行
Flatter test时,它只是我还是此结构不工作?但在IDE中工作。有人准备同时使用命令行和IDE吗?@IkarPohorský看看Grahambo的答案。我和你们有类似的问题,他的回答为我解决了。我更喜欢在测试目录中创建资源目录。通过这种方式,我可以使用以下路径获取资源文件test/resources/contacts.json,并且我可以将所有测试文件保存在test中。尝试运行flattertest
。不需要相对路径。我也有同样的问题,对我来说,它适用于颤振测试
。
String fixture(String name) {
var dir = Directory.current.path;
if (dir.endsWith('/test')) {
dir = dir.replaceAll('/test', '');
}
return File('$dir/test/fixtures/$name').readAsStringSync();
}