Testing 我怎样才能做到;“颤振驱动”;RenderFlex溢出异常失败?

Testing 我怎样才能做到;“颤振驱动”;RenderFlex溢出异常失败?,testing,flutter,Testing,Flutter,我有一个颤振驱动集成测试,它将在各种设备上运行测试,作为CI构建的一部分。颤振驱动仅在输出中记录异常,但不会使测试失败。当呈现引擎抛出此Renderflex溢出异常时,是否有某种方法强制测试失败 $ flutter drive test_driver/app.dart I/flutter (20477): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞════════════════════════════════════════════════════

我有一个颤振驱动集成测试,它将在各种设备上运行测试,作为CI构建的一部分。颤振驱动仅在输出中记录异常,但不会使测试失败。当呈现引擎抛出此Renderflex溢出异常时,是否有某种方法强制测试失败

$ flutter drive test_driver/app.dart

I/flutter (20477): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (20477): The following assertion was thrown during layout:
I/flutter (20477): A RenderFlex overflowed by 1.00 pixels on the bottom.
...
I/flutter (20477): ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
I/flutter (20477): ════════════════════════════════════════════════════════════════════════════════════════════════════
00:25 +4: MyTestDriver App (tearDownAll)
00:25 +4: All tests passed!
此异常也不会在应用程序中传播,因此应用程序和“颤振驱动”集成测试似乎都没有明显的访问权限

所有搜索都会出现关于如何解决问题的问题,但没有一个是关于如何作为CI构建中集成测试的一部分进行测试和检测的问题


理想情况下,测试将返回非零,并让CI系统在提交时失败,从而引入新的渲染错误。

在深入研究了flift和dart的源代码后,似乎很难在运行的集成测试中发现这一点,因为当检测到问题时,用户代码甚至可能不在堆栈上

对于希望解决此问题的人,至少有希望在CI构建过程中发现问题,此黑客可能适用于您的项目

flatterdrive
脚本本身(在我的例子中,可以随意更改,当然,也可以将test\u driver/app.dart更改为您为测试编写的内容):

#/usr/bin/env bash
TEST_COMMAND_LINE=“颤振驾驶测试驾驶员/app.dart”
TEST_COMMAND_LOG=“build/flatter_drive.LOG”
#以防其他任务尚未创建此
mkdir-p构建
${TEST_COMMAND_LINE}tee${TEST_COMMAND_LOG}
如果[${PIPESTATUS[0]}!=0];然后
echo“${TEST_COMMAND_LINE}失败。有关详细信息,请参阅${TEST_COMMAND_LOG}”
出口1
fi
以及日志的测试后扫描:

#/usr/bin/env bash
#在此处添加“颤振驱动”记录的所有错误。如果找到文本
#在颤振驱动输出中,该命令将返回非零。
声明-a错误\u表达式=(
“呈现库捕获到异常”
)
TEST_COMMAND_LOG=“build/flatter_drive.LOG”
对于“${ERROR_EXPRESSIONS[@]}”中的errorExpression
做
异常计数=`grep“${errorExpression}”${TEST_COMMAND_LOG}}wc-l`
如果[${EXCEPTION_COUNT}!=0];然后
echo“错误:在${TEST_COMMAND_LOG}中找到错误表达式${errorExpression}”
出口1
fi
完成
这是完成工作最不优雅的方式。理想情况下,Flatter drive会有一些查询来检查最后抛出的异常(就像小部件测试系统对
Flatter test
和驱动程序所做的那样),甚至可能作为命令行选项与驱动程序本身集成,以便任何未捕获的异常都会导致集成测试失败

这可能对其他面临同样问题的人有所帮助,但肯定有更好的方法。这感觉像是一个特定于项目的hack,它应该是使用Flutter和Dart进行测试的一部分。必须有一种更明显、更普遍的方法来做同样的事情

具体来说,这解决了我自己的问题,但如果有一个更有知识的人能与我们分享如何正确操作,那就太棒了!:)

就这么简单:

wait-driver.waitFor(find.text('note existing text TO FAIL THE TEST'))


哈,刚才看到的问题是关于RenderFlex的,不确定它是否会起作用,但你得到了要点,将为像我这样的人留下这个答案,他们想通过任何测试。

你能发布你尝试过的代码块吗?yetAny测试会产生溢出。制作一个由于剪辑到父级或设备而不会呈现的小部件。