2

我创建了一个 Loader 类,用于加载包含名称的文本资源。在程序中使用时它工作正常, Unable to load asset: assets/texts/names.txt但当我尝试在测试中使用它时出现错误。

我的目录结构是

|- 资产  
   |- 文本  
      |- 名称.txt  
|- 加载文本  
   |- load_text.dart  
   |- loader.dart  
|- 测试  
   |-asset_test.dart

我的 pubspec.yaml 已- assets/texts/names.txt包含在内。

加载器.dart

class Loader{
   Future<String> loadNames() async{
    return await rootBundle.loadString('assets/texts/names.txt');
   }
}

load_text.dart

class ValidationApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
    title: 'userDetApp',
    home: Scaffold(
    appBar: AppBar(title: Text('Load names'),),
    body: Column(
      children: <Widget>[
        RaisedButton(
          child: Text('Click'),
          onPressed: (){
            Loader().loadNames().then((names){
                print(names);
            });
          },
        )
      ],
    )
  ),
);

} }

资产测试.dart

void main(){
   test('Should load asset', () async{
       String names = await new Loader().loadNames();
       expect(names, 'John, Peter, Mary');
   });
}

除了未能找到资产的测试外,一切正常。需要帮忙。谢谢!

4

1 回答 1

0

flutter driver我在使用集成测试访问文件资源时遇到了类似的问题。我作为一种解决方法所做的是将所需的资源加载到 API 并直接解析 JSON 响应,而不是从 assets 文件夹中访问资源。

这是您可以尝试的示例。这使用https://jsonplaceholder.typicode.com作为其端点示例。

test('Test http', () async {
    final file = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/albums/1'));
  final json = jsonDecode(file.body.toString());
  print('json contents: $json');
  print('userId: ${json['userId']}');
  final userId = json['userId'];
  expect(userId, 1);
});
于 2021-12-20T07:32:07.507 回答