颤动:如何加载文件进行测试

Kya*_*Tun 7 testing intellij-idea readfile flutter

可以从相对于dart脚本文件的目录中读取文件,简单如下var file = new File('./fixture/contacts.json').

但是文件无法读取在IDE内运行的颤动测试.

作为资源加载(它不是,因为我不想在应用程序中捆绑测试数据文件)也不能在测试中工作.

在flutter中读取文件的好方法是什么(对于命令行测试和IDE测试)?

跑步flutter test非常快.但是,Intellij IDE内部的测试速度很慢,但它可以设置调试断点并进入并查看变量.所以这两种测试都非常有用.

Iir*_*kka 12

刚刚开始,这比你想象的要容易.

首先,创建一个与测试位于同一目录中的文件夹.例如,我创建了一个名为test_resources的文件夹.

测试资源文件夹结构.

然后,假设我们有以下JSON文件用于测试目的.

test_resources/contacts.json

{
  "contacts": [
    {
      "id": 1,
      "name": "Seth Ladd"
    },
    {
      "id": 2,
      "name": "Eric Seidel"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

测试/ load_file_test.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 = json.decode(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');
  });
}
Run Code Online (Sandbox Code Playgroud)

  • 是我还是在运行“颤振测试”时此结构不起作用?虽然可以在IDE中使用。有人设置同时在命令行和IDE中工作吗? (2认同)
  • @IkarPohorský 看看 Grahambo 的答案。我和你有类似的问题,他的回答为我解决了这个问题。 (2认同)

Gra*_*mbo 10

我今天遇到了同样的问题。我的测试在我的 IDE (Android Studio) 中通过了,但在 CI 上失败了。我发现 IDE 想要一个非相对路径,但flutter test想要一个相对路径。我认为这是一个错误,我会寻找合适的地方来报告它。但是,我在此期间找到了一个粗略的解决方法。基本上,我有一个函数可以尝试两种方式来指定文件路径..

import 'dart:convert';
import 'dart:io';

Future<Map<String, dynamic>> parseRawSample(String filePath,
    [bool relative = true]) async {
  filePath = relative ? "test_data/src/samples/raw/$filePath" : filePath;

  String jsonString;
  try {
    jsonString = await File(filePath).readAsString();
  } catch (e) {
    jsonString = await File("../" + filePath).readAsString();
  }
  return json.decode(jsonString);
}

Run Code Online (Sandbox Code Playgroud)

大部分代码都特定于我的情况,但我认为其他人可能会根据他们的目的调整这项工作。

  • 尝试运行“颤动测试测试”。不需要相对路径。 (6认同)

Ter*_*rry 7

我创建了一个 util 因为 vscode 和命令行测试基本路径不同

https://github.com/terryx/flutter-muscle/blob/master/github_provider/test/utils/test_path.dart

这就是我使用它的方式

https://github.com/terryx/flutter-muscle/blob/master/github_provider/test/services/github_test.dart#L13


另一种方法是在命令行中指定确切的测试路径

$ flutter test test
Run Code Online (Sandbox Code Playgroud)


zex*_*oor 5

一个简单的解决方案是

import 'dart:io';

String fixture(String name) => File('test/fixtures/$name').readAsStringSync();
Run Code Online (Sandbox Code Playgroud)

test文件夹与文件夹处于同一级别lib,您可以像这样访问夹具: String fileContent = fixture('contacts.json')

之后,通常使用from转换fileContent为Map对象,然后将转换后的对象映射到通常具有方法的所需模型。jsonDecodedart:convertmyModel.fromJson(Map onvertedJson)

您可以使用json to dart android studio 插件从 JSON 响应生成模型,或者使用在线转换器工具,例如此在线 JSON 转换器