Flutter-加载测试资产

Vic*_*ves 5 flutter flutter-test

不知道这是一个限制还是什么,但是下面的代码不会加载任何东西。我有一些数据驱动的行为,我想对它们进行测试。

类加载器

import 'dart:async';
import 'package:flutter/services.dart' show rootBundle;

class Loader {
  Future<String> load() async{
    return await rootBundle.loadString('assets/json/sketch.json');
  }
}
Run Code Online (Sandbox Code Playgroud)

考试

testWidgets('Should parse load sketch.json', (WidgetTester tester) async {
    var loaderFuture = new Loader();

    Future<String> resultFuture = loaderFuture.load();

    resultFuture.then((value) => print(value))
        .catchError((error) => print(error));

    while(true){};
  });
Run Code Online (Sandbox Code Playgroud)

未来不会返回成功或错误,并且永远挂起。我知道while(true)锁定了测试,但是现在我只想看一下输出sketch.json的信息。

资产位置

在此处输入图片说明

Tim*_*mmm 8

rootBundle在您的测试中使用,您需要在测试程序的开头使用它:

import 'package:flutter_test/flutter_test.dart';

...
void main() {
  TestWidgetsFlutterBinding.ensureInitialized();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,将 `WidgetsFlutterBinding.ensureInitialized();` 替换为 `TestWidgetsFlutterBinding.ensureInitialized();` 实际上有效! (4认同)

Sim*_*mon 6

请参阅DefaultAssetBundle的文档,它描述了使用它和 AssetBundle 来提供您自己的资产。

  • @Simon - 测试小部件以外的东西怎么样,我有一个 API 类,它需要从资产文件夹加载一个 JSON 文件,它在测试环境中不起作用。 (8认同)
  • @RajYadav 您能否详细说明如何为我的测试定义资产,而不是使用我的包的应用程序的资产? (2认同)
  • 链接已损坏:( (2认同)