如何在小部件测试中测试特定的 ProviderNotFoundException

Posted

技术标签:

【中文标题】如何在小部件测试中测试特定的 ProviderNotFoundException【英文标题】:How to test for a specific ProviderNotFoundException in widget test 【发布时间】:2021-09-17 05:43:57 【问题描述】:

我在某个小部件上方创建了一些提供者(例如提供者 A、B、C),并在从小部件树中删除提供者的情况下测试 ProviderNotFoundException

现在我正在像这样测试ProviderNotFoundException

expect(tester.takeException(), isA<ProviderNotFoundException>());

这是非常通用的,因为如果它们被删除,这将适用于所有提供者 A、B 和 C。我想添加额外的约束来检查是否只有提供者 B 没有找到。

我尝试在isA 上使用having 方法,但无法正常工作。

expect(
              tester.takeException(),
              isA<ProviderNotFoundException>().having(
                (e) => e.valueType,
                'valueType',
                contains('A'),
              ));

【问题讨论】:

having 应该是要走的路 - 你介意发布你尝试过的代码吗? @MichaelHorn 我意识到我的错误。 matcher 参数应该具有 Provider 的类型,并且不检查它是否包含 Provider 的名称。我将在下面发布解决方案 【参考方案1】:

使用having 方法添加额外的约束并检查feature 参数是否正确匹配matcher 参数。

 expect(
              tester.takeException(),
              isA<ProviderNotFoundException>().having(
                (e) => e.valueType,
                'valueType',
                A,
              ));

【讨论】:

以上是关于如何在小部件测试中测试特定的 ProviderNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

如何在小部件测试中找到屏幕外的 ListView 子项?

Flutter - 如何在小部件测试中选择 DropdownButton 项

如何在小部件测试期间存根不属于类的函数?

在小部件测试期间检查颜色?

在小部件测试中处理提供程序

如何在 Flutter 小部件测试中执行缩放(捏缩放)多指手势?