Mar*_*rcG 4 testing layout flutter flutter-test
测试使用Ahem 字体运行,该字体太大,有时会溢出,破坏测试。一些测试无论如何都不关心溢出,所以应该有一种方法来停用它们。
我有许多测试在模拟器中运行正常,但在测试中出现故障。
对于现实中永远不会溢出的小部件,我们被迫防止溢出,或者为测试提供字体,而不是Ahem,只是为了不溢出测试。除非您正在进行“溢出错误测试”,否则测试溢出错误是没有意义的。
如何关闭这些错误,或者如何让测试忽略它们?
Edu*_*chi 11
根据@R\xc3\xa9miRousselet 的回答,我开发了一个解决方案。
\n\nFlutterError.onError = _onError_ignoreOverflowErrors;\n\nFunction _onError_ignoreOverflowErrors = (\n FlutterErrorDetails details, {\n bool forceReport = false,\n}) {\n assert(details != null);\n assert(details.exception != null);\n // ---\n\n bool ifIsOverflowError = false;\n\n // Detect overflow error.\n var exception = details.exception;\n if (exception is FlutterError)\n ifIsOverflowError = !exception.diagnostics\n .any((e) => e.value.toString().startsWith("A RenderFlex overflowed by"));\n\n // Ignore if is overflow error.\n if (ifIsOverflowError)\n print(\'Overflow error.\');\n\n // Throw others errors.\n else\n FlutterError.dumpErrorToConsole(details, forceReport: forceReport);\n};\nRun Code Online (Sandbox Code Playgroud)\n\n该函数仅忽略溢出异常。
\n您无法专门禁用溢出。但还有一些替代方案:
FlutterError.onErrornull小智 6
如果您的问题纯粹是由于Ahem 字体太大而引起的,您可以尝试使用可访问性 textScaleFactor 缩小所有文本,方法是将 WidgetUnderTest 包装在 MediaQuery 中,如下所示:
MediaQuery(
// Shrink the text avoid overflow caused by large Ahem font.
data: MediaQueryData(textScaleFactor: 0.5),
child: WidgetUnderTest(),
);
Run Code Online (Sandbox Code Playgroud)
这应该比在您的小部件测试中加载不同的字体快得多,并且不会因混淆FlutterError.onError. 但是,如果您的小部件不支持 textScaleFactor,或者如果溢出是由其他原因引起的,这将无济于事。
请注意,这可能隐藏了一个实际问题。最好的解决方案是修复或重新设计您的 UI,使其即使使用大字体的 testScaleFactor: 1.5 也不会溢出,因此将字体设置为最大设置的用户将能够使用您的应用程序。
| 归档时间: |
|
| 查看次数: |
3878 次 |
| 最近记录: |