一尘不染

Flutter Widget测试与NetworkImage

flutter

我有一个WidgetNetworkImage(所以用硬编码的网址远)。
我想对小部件进行测试,但是运行小部件测试时得到404(URL为100%有效)。
我该如何自行NetworkImages加载或(最好) 忽略它们, 以使我的测试不会因为404而失败?


阅读 400

收藏
2020-08-13

共1个答案

一尘不染

在小部件测试中,默认的HTTP客户端已替换为始终返回400s的客户端。在flutter_markdown存储库中以及其他几个地方,都有一个有关如何执行此操作的示例。我曾经将其复制并粘贴到每个项目中,但是我做了足够多次以至于变得很无聊。

(我自己)现在有一个名为
image_test_utils”的库
。您可以使用一种provideMockedNetworkImages方法包装小部件测试,该方法将模拟的HTTP客户端替换为始终返回透明图像的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.
    });
  });
}
2020-08-13