简体   繁体   English

如何对访问 Provider.of(context) 的小部件进行 Flutter 测试

[英]How to do a Flutter Test for a widget that accesses Provider.of(context)

I was wondering if someone could help me out, I am having trouble writing tests for my home page on my flutter project as it relies on a Provider.我想知道是否有人可以帮助我,我在 flutter 项目上为我的主页编写测试时遇到了麻烦,因为它依赖于提供程序。

home_page.dart home_page.dart

Future<NewsModel> newsData = Provider.of<Future<NewsModel>>(context);

return FutureProvider(
  create: (context) => newsData,
  child: (newsData != null)
      ? Scaffold(
          body: SmartRefresher(
            controller: _refreshController,
            onRefresh: _refreshNews,
            onLoading: _onLoading,
            child: Consumer<NewsModel>(
              builder: (_, news, __) {...}

main.dart main.dart

return MultiProvider(
  providers: [
    FutureProvider(create: (context) => geolocatorService.getlocation()),
    ProxyProvider<Position, Future<NewsModel>>(
      update: (context, position, news) {
        return (position != null) ? newsService.getNews() : null;
      },
    ),

home_page_test.dart home_page_test.dart

testWidgets('Test the home screen', (WidgetTester tester) async {
HomePage homePage = new HomePage();

await tester.pumpWidget(
  makeWidgetTestable(
    child: homePage,
  ),
);

}); }); } }

When I run this test I receive the below error, I am really confused here and need some guidance.当我运行这个测试时,我收到以下错误,我真的很困惑,需要一些指导。 I am fairly experienced with Flutter but am a newbie to writing widget tests for widgets that require external dependencies.我对 Flutter 相当有经验,但我是为需要外部依赖项的小部件编写小部件测试的新手。 If someone can help this would be great.如果有人可以提供帮助,那就太好了。

Error:错误:

The following ProviderNotFoundException was thrown building HomePage(dirty, dependencies [MediaQuery], state: _HomePageState#ce244): Error: Could not find the correct Provider<Future<NewsModel>> above this HomePage Widget

If you wrap the following code with the provider from your main file:如果您使用主文件中的提供程序包装以下代码:

await tester.pumpWidget(
  makeWidgetTestable(
    child: homePage,
  ),
);

and turn it into:并将其变成:

testWidgets('Test the home screen', (WidgetTester tester) async {
//No longer need the following line
//HomePage homePage = new HomePage();

await tester.pumpWidget(
MultiProvider(
  providers: [
    FutureProvider(create: (context) => geolocatorService.getlocation()),
    ProxyProvider<Position, Future<NewsModel>>(
      update: (context, position, news) {
        return (position != null) ? newsService.getNews() : null;
      },
    ),
    child: homePage,
  ),
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何调用ThemeService themeService = Provider.of(context); 在脚手架的初始状态? - How to call ThemeService themeService = Provider.of(context); in the initial state of a scaffold? 在没有实现的窗口小部件提供程序的情况下,如何查找窗口小部件ID? - How do you find a widget ID without an implemented widget provider? 如何通过意图将数据从小部件配置类传递到小部件提供程序类? - How do I pass data from a widget config class to a widget provider class via intents? 你如何在 Flutter 中制作水平数字选择器小部件? - How do you make a Horizontal Number Picker Widget in Flutter? Flutter - 如何使 scrollwidget 内的小部件不可滚动? - Flutter - How do I make a widget inside scrollwidget unscrollable? 如何减小 Flutter 抽屉内开关小部件的宽度 - How do i decrease the width of a switch widget inside a drawer in Flutter 如何将上下文传递给另一个小部件? - How to pass a context to another widget? Flutter 错误:找不到正确的提供程序<MyUser>在这个 SettingsForm 小部件上方 - Flutter Error: Could not find the correct Provider<MyUser> above this SettingsForm Widget 初学者-如何测试小部件? - beginner - how to test a widget? 如何在flutter中创建Stream Provider - How to create Stream Provider in flutter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM