Flutter Image.network测试因异常失败

问题描述 投票:0回答:1

我使用 Image.network 来显示项目的图像:

Image.network(
  pictureUri,
  errorBuilder: (context, error, stackTrace) => Image.asset(
    noPictureAssetUri,
  ),
);

当给定的项目有图像时,服务器返回该图像,如果该项目没有图像,则服务器返回错误 404。

它在发布模式下工作正常 - 如果有图像,则显示它,如果服务器发送 404,则它使用该资源。

但是,当我运行集成测试(颤振测试integration_test)时,它们显示:

══╡ 图片资源服务异常 ╞═════════════════════════════ ══════════ ═════════════ 解析图像编解码器时引发以下 NetworkImageLoadException: HTTP请求失败,状态代码:404,

然后失败了:

══╡ Flutter 测试框架捕获异常 ╞═════════════════════════════ ══════════ ═════════════ 抛出以下消息: 本次测试运行过程中检测到多个异常(5个),其中至少有一个异常 出乎意料。

尽管一切都按预期进行,但测试还是失败了。

如何才能让我的测试通过?我需要其中一个:

  • 捕获这些内部异常的方法
  • 忽略颤动测试 这些例外。

我想补充一点,这是一个端到端测试,在真实(开发)服务器上运行,所以我不能像建议的那样模拟 http 客户端。当真实服务器在调试模式下返回它时,我需要一种方法来处理 404 错误。

我的扑医生,如果你需要的话:

Doctor 摘要(要查看所有详细信息,请运行 flutter doctor -v):

[√] Flutter(频道稳定,3.3.10,在 Microsoft Windows [版本 10.0.22621.963],区域设置 en-150)

[√] Android 工具链 - 为 Android 设备开发(Android SDK 版本 33.0.0)

[√] Chrome - 网络开发

[√] Android Studio(版本2021.2)

[√] VS Code(版本1.74.2)

[√]已连接设备(4个可用)

[√] HTTP 主机可用性

flutter flutter-test end-to-end flutter-exception
1个回答
0
投票

我还没有找到这个问题的直接答案。在这种情况下,内部

Image.network
似乎总是会引发异常,这将停止调试模式应用程序。

因此,使用非模拟数据库运行集成测试的唯一方法是完全规避图像加载。执行此操作的一种方法是,当您运行集成测试并创建应用程序的实例时,您传递一些参数来告诉应用程序这实际上是一个测试,例如

app.main(isTestMode: true);
。然后,当应用程序处于测试模式时,您可以创建一个 if 来加载静态资源:

if (MyApp.isTestMode)
{
    return Image.asset(...);
}
else
{
    return Image.network(...);
}

这种方法的明显缺点是它不允许您在测试过程中测试图像是否正确加载,但总比没有好。

© www.soinside.com 2019 - 2024. All rights reserved.