编写使用GoogleFonts的flutter小部件测试

d8tt03nd  于 2023-03-19  发布在  Flutter
关注(0)|答案(3)|浏览(122)

我需要写一个Flutter部件测试来测试一个使用GoogleFonts插件的部件。但是,它会给出网络失败,这是正确的,因为测试套件没有访问互联网。问题是GoogleFonts。majorMonoDisplayTextTheme是一个静态方法,使得它不可能在部件测试中使用时模拟GoogleFont类。

Error: google_fonts was unable to load font MajorMonoDisplay-Regular because the following exception occurred: 
Exception: Failed to load font with URL: https://fonts.gstatic.com/s/a/9901077f5681d4ec7e01e0ebe4bd61ba47669c64a7aedea472cd94fe1175751b.ttf

小部件使用:

Container(
      padding: EdgeInsets.only(top: 10),
      child: Text(
        _now,
        style: GoogleFonts.majorMonoDisplayTextTheme(Theme.of(context).textTheme).headline3,
      ),
    ),

控件测试方法:

testWidgets(
  'Shoudl display _now text',
  (WidgetTester tester) async {
  await tester.pumpWidget(_TestWidgetWithGoogleFont);
  await tester.pumpAndSettle();
  expect(find.byType(Text), findsOneWidget);
});
w8f9ii69

w8f9ii691#

还有另一种方法可以消 debugging 误,如果你不想(或不能)在项目中添加额外的文件,这一方法特别方便。
只需将这行代码添加到所需的测试中:

setUp(() => GoogleFonts.config.allowRuntimeFetching = false);

这段代码不允许运行时获取,这是一个首先引发错误的过程。

uqzxnwby

uqzxnwby2#

x1c 0d1x首先,你必须在pubspec.yaml文件中提供字体,只需按照这些步骤下载堡提取它。转到您的项目文件,并创建一个名为“assets”的文件夹,并在assets文件夹中创建另一个名为“fonts”的文件夹。在此字体文件夹中粘贴字体。tiff复制文件名,在本例中为“MajorMonoDisplay-Regular.ttf”
接下来你必须提供pubspec.yaml文件中的字体信息,只需复制粘贴这些代码。

fonts:
- family: MajorMonoDisplay
  fonts:
    - asset: assets/fonts/MajorMonoDisplay-Regular.ttf

接下来在开放终端中运行“flutter pub get”,现在只需在TextStyle中提供fort家族。

child: Column(
              children: [
                Text(
                  'Should display _now text',
                  style: TextStyle(
                    fontSize: 20,
                    fontFamily: 'MajorMonoDisplay',
                  ),
                )
              ],
            ),

如果前面没有显示,则关闭应用程序并重新运行。

icomxhvb

icomxhvb3#

我也有同样的问题。
我试着遵循伊利亚Kurtov给出的解决方案(使用GoogleFonts编写flutter小部件测试),但这引发了另一个错误:Exception: GoogleFonts.config.allowRuntimeFetching is false but font Lato-Regular was not found in the application assets. Ensure Lato-Regular.ttf exists in a folder that is included in your pubspec's assets.
我找到的唯一解决办法是:
1.从未建议代码行(例如,https://fonts.gstatic.com/s/a/6e6ed20d655bef45270197c043b98acc546b2455874705cd35adda969c35c2c3.ttf)引发的错误所提供的链接下载所需的[font_name].ttf文件(例如,Lato-Regular.ttf);
1.将其添加到assets文件夹中,并将给定路径添加到“pubspec.yaml”中(例如“assets/Lato-Regular.ttf”);
1.此时,您可以删除setUp(() => GoogleFonts.config.allowRuntimeFetching = false);,因为所需的字体将从资源中加载;

相关问题