在Flutter测试中无法加载资源

14

rootBundle在应用程序中运行良好,但在测试中会抛出异常ERROR:无法加载资产:assets / config / prod.json

configuration.dart

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

class Configuration {

  final Map<String, String> _config = {};

  String get(String key) {
    return _config[key];
  }

  Future<void> load() async {
    _config.clear();
    final configString = await rootBundle.loadString('assets/config/prod.json');
    final configJson = jsonDecode(configString) as Map<String, dynamic>;
    _config.addAll(Map.castFrom<String, dynamic, String, String>(configJson));
  }

}

configuration_test.dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:my_app/data/models/configuration.dart';

void main() {

  setUpAll(() {
    WidgetsFlutterBinding.ensureInitialized();
  });

  test('should load configuration', () async {
    final config = Configuration();
    await config.load();
    expect(config.get('client_id'), 'client_id');
  });

}

pubspec.yaml

...
dev_dependencies:
  ...
  flutter_test:
    sdk: flutter

flutter:
  assets:
    - assets/config/
...

我做错了什么?

3个回答

17
我找到了我的测试出了什么问题。 在flutter_test包中有TestWidgetsFlutterBinding,我应该使用它,而不是来自material包的WidgetsFlutterBinding

configuration_test.dart

import 'package:flutter_test/flutter_test.dart';
import 'package:my_app/data/models/configuration.dart';

void main() {

  setUpAll(() {
    TestWidgetsFlutterBinding.ensureInitialized();
  });

  test('should load configuration', () async {
    final config = Configuration();
    await config.load();
    expect(config.get('client_id'), 'client_id');
  });

}

在我的集成测试中,这个方法对我来说没有起作用。 - Rudolf J

2
如果你在构建Flutter包时遇到了这个问题, 请注意默认情况下在pubspec.yaml中,flutter属性被设置为null (flutter: null),并且资源文件的缩进不正确。
因此,你需要先将flutter属性设置为空,像这样:
flutter: 然后确保资源文件的缩进如下:
[2 whitespaces or 1 tab]assets:

[4 whitespaces or 2 tabs]- assets/image1.png

[4 whitespaces or 2 tabs]- assets/image2.png

2
如果你在 puspec.yaml 文件中定义 JSON 文件,你需要像下面这样写出你的 JSON 文件的全名。
assets:
  - assets/data.json

在您的情况下,路径将会是:
assets:
  - assets/config/prod.json

应用程序仍在工作,但在测试中抛出异常。 - Anton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接