我关注这篇文章:https://medium.com/flutterpub/architecting-your-flutter-project-bd04e144a8f1,我需要可以从资产中解析某些文件的配置提供程序。我的提供者做的正确,启动应用程序后可以看到结果。但是我该如何测试呢?
我尝试该测试:
void main() {
testWidgets('ConfigurationProvider can parse asset configuration file',
(WidgetTester tester) async {
final AutomatedTestWidgetsFlutterBinding binding = tester.binding;
binding.addTime(Duration(seconds: 3));
await tester.pumpWidget(
MaterialApp(
home: DefaultAssetBundle(
bundle: TestAssetBundle(),
child: MockWidget(),
),
),
);
await Future.delayed(Duration(seconds: 1));
final conf = configurationProvider.config;
expect(conf, isNotNull);
});
}
class MockWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
configurationBloc.fetchConfig();
return Scaffold(
body: StreamBuilder(
stream: configurationBloc.config,
builder: (context, AsyncSnapshot<ConfigurationModel> snapshot) {
if (snapshot.hasData) {
return builder(snapshot);
} else if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
return Center(child: CircularProgressIndicator());
},
),
);
}
Widget builder(AsyncSnapshot<ConfigurationModel> snapshot) {
return Text(snapshot.data.apiVersion);
}
}
// https://docs.flutter.io/flutter/widgets/DefaultAssetBundle-class.html
class TestAssetBundle extends CachingAssetBundle {
@override
Future<ByteData> load(String key) async {
if (key == 'lib/src/assets/configuration.yaml')
return ByteData.view(
Uint8List.fromList(utf8.encode(configurationYAML)).buffer);
return null;
}
static const configurationYAML = '''
apiVersion: "v1.0"
''';
}
提供程序的fetchConfig()调用方法,该方法会更新预期的配置属性。
测试开始后出现错误:
TimeoutException after 0:00:05.500000: The test exceeded the timeout.