不确定这是否是一个限制,但下面的代码不会加载任何内容。我有一些数据驱动的行为,我想测试孤立的。
类装载机
import 'dart:async';
import 'package:flutter/services.dart' show rootBundle;
class Loader {
Future<String> load() async{
return await rootBundle.loadString('assets/json/sketch.json');
}
}测试
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打印出来
资产定位

发布于 2018-06-27 16:45:48
请参阅它描述的DefaultAssetBundle文档和一个AssetBundle来提供您自己的资产。
发布于 2020-06-30 20:58:41
要在测试中使用rootBundle,在测试程序开始时需要这样做:
import 'package:flutter_test/flutter_test.dart';
...
void main() {
TestWidgetsFlutterBinding.ensureInitialized();发布于 2022-09-05 21:44:39
创建一个包装rootBundle的类:
@injectable
class AssetsManager {
Future<String> loadString(String path) {
return rootBundle.loadString(path);
}
}然后将其注入到类中,并在测试中覆盖它的依赖项:
getIt.unregister<AssetsManager>();
getIt.registerSingleton<AssetsManager>(AssetsManagerMock());根据您的测试场景,配置调用loadString时将返回的内容,方法是使用Mocktail的 when 方法。
我使用它作为DI。希望一切都足够清楚。
https://stackoverflow.com/questions/49480080
复制相似问题