如何在 Jetpack compose 中处理 Espresso 空闲资源......?

How to handing Espresso idling Resources in Jetpack compose....?

我正在编写 ui 在 Jetpack Compose 中使用 junit 和 Espresso 的测试用例。我的屏幕由 Lottie 动画和 Kotlin 的一些代码组成 Courtines.I 我正在编写单个测试用例来检查该屏幕中按钮的可见性但是它给我的错误是 compse Espresso 变成空闲时间 out.Can any正文展示了一些示例,说明如何在 Jetpack Compose 中使用 Espresso 处理递增和递减,或者以任何其他方式处理这种情况....

因此,如果您要像这样初始化 composeTestRule,例如:

@get:Rule
val composeTestRule = createEmptyComposeRule()

然后当您有待处理布局、测量或某种无限重组循环中的可组合项时,它将暂停直到空闲。

自 Compose 1.1 以来,我注意到如果我有一个已组合但未显示在屏幕上的可组合项(例如,在已启动的不可见子片段中),测试将因组合而超时闲置资源。 所以我的解决方案是简单地不在我的测试中定义 composeTestRule,除非测试将与可见的可组合项交互。

如果您直接与可组合项交互,则可以尝试以下操作:

composeTestRule.mainClock.autoAdvance = true

此外,您的 Lottie 动画可能导致某种无限重组。在没有 Lottie 动画的情况下尝试测试。您也可以尝试使用它来禁用应用程序中的动画 build.gradle 文件:

testOptions {
    ...
    animationsDisabled = true
    ...
}

如果所有这些仍然失败,请尝试在您的可组合项中放置一个日志,以检查它是否在不应该停止的情况下不停地重组,然后找出它发生的原因。

编辑:还有一件事,您可以使用 composeTestRule.registerIdlingResource(idlingResource -> compose specific idling resource.)

为 compose 注册自己的空闲资源(并弄清楚它是如何工作的)