dart - 使用 NetworkImage 进行 Flutter 小部件测试

我有一个带有 NetworkImageWidget(到目前为止是硬编码的 url)。
我想对这个 Widget 进行小部件测试,但在运行小部件测试时得到 404(网址 100% 有效)。
我怎样才能让 NetworkImages 自己加载或(更好)忽略它们,这样我的测试就不会因为 404 而失败?

最佳答案

在小部件测试中,默认 HTTP 客户端 has been replaced一个总是返回 400s。 flutter_markdown repo 中有一个关于如何执行此操作的示例以及其他几个地方。我曾经将它复制并粘贴到每个项目中,但我做了足够多的时间来感到很无聊。

现在有一个库(由我创建),名为 "image_test_utils" .您可以使用 provideMockedNetworkImages 方法包装小部件测试,该方法将模拟的 HTTP 客户端替换为始终返回透明图像的客户端。这反过来又使您的测试通过。

pubspec.yaml:

dev_dependencies:
  image_test_utils: ^1.0.0

my_image_test.dart:

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:image_test_utils/image_test_utils.dart';

void main() {
  testWidgets('my image test', (WidgetTester tester) async {
    provideMockedNetworkImages(() async {
      /// Now we can pump NetworkImages without crashing our tests. Yay!
      await tester.pumpWidget(
        MaterialApp(
          home: Image.network('https://example.com/image.png'),
        ),
      );

      /// No crashes.
    });
  });
}

https://stackoverflow.com/questions/49166234/

相关文章:

dart - Flutter - 是否可以在不使用 FutureBuilder 的情况下从 Futu

dart - 全宽按钮,如何对齐文本

regex - 如何从 Dart 中的字符串中仅删除符号

flutter - 如何像在 Hamilton Flutter 应用程序中一样在 Flutter 中

dart - Flutter Android PreferenceScreen 设置页面

flutter - 如何拉伸(stretch)图标以填充父级?

dart - flutter 测试 : Waiting for a certain duration

flutter - 在 initState 中调用 SetState 的重要性

testing - Flutter:如何加载文件进行测试

flutter - child : and children: property in Flutte