首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试用颤振负载资产

测试用颤振负载资产
EN

Stack Overflow用户
提问于 2018-03-25 19:33:23
回答 3查看 10.2K关注 0票数 23

不确定这是否是一个限制,但下面的代码不会加载任何内容。我有一些数据驱动的行为,我想测试孤立的。

类装载机

代码语言:javascript
复制
import 'dart:async';
import 'package:flutter/services.dart' show rootBundle;

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

测试

代码语言:javascript
复制
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){};
  });

未来既不返回成功也不返回错误,永远挂在嘴边。我知道同时(真)锁定了测试,但现在我只想看到sketch.json打印出来

资产定位

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-27 16:45:48

请参阅它描述的DefaultAssetBundle文档和一个AssetBundle来提供您自己的资产。

票数 6
EN

Stack Overflow用户

发布于 2020-06-30 20:58:41

要在测试中使用rootBundle,在测试程序开始时需要这样做:

代码语言:javascript
复制
import 'package:flutter_test/flutter_test.dart';

...
void main() {
  TestWidgetsFlutterBinding.ensureInitialized();
票数 15
EN

Stack Overflow用户

发布于 2022-09-05 21:44:39

创建一个包装rootBundle的类:

代码语言:javascript
复制
@injectable
class AssetsManager {
  Future<String> loadString(String path) {
    return rootBundle.loadString(path);
  }
}

然后将其注入到类中,并在测试中覆盖它的依赖项:

代码语言:javascript
复制
  getIt.unregister<AssetsManager>();
  getIt.registerSingleton<AssetsManager>(AssetsManagerMock());

根据您的测试场景,配置调用loadString时将返回的内容,方法是使用Mocktail的 when 方法。

我使用作为DI。希望一切都足够清楚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49480080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档