使用jetpack compose时在android测试中测试小吃栏

发布于 2025-01-09 16:53:19 字数 568 浏览 1 评论 0原文

我正在使用 jetpack compose 并使用此代码来显示我的 Snackbar:

 LaunchedEffect(true) {
        viewModel.snackBar.collectLatest { message ->
            scaffoldState.snackbarHostState.currentSnackbarData?.dismiss()
            scaffoldState.snackbarHostState.showSnackbar(message = message)
        }
    }

通常,当我想要访问 compose 元素时,我在 modifier 中使用 testTag。但 Snackbar 没有。那么我如何测试我的 Snackbar 是否显示特定文本?

我尝试使用:

 composeRule.onNodeWithText(SNACKBAR_MESSAGE).assertIsDisplayed()

但它找不到任何节点。

I'm using jetpack compose and use this code to show my Snackbar:

 LaunchedEffect(true) {
        viewModel.snackBar.collectLatest { message ->
            scaffoldState.snackbarHostState.currentSnackbarData?.dismiss()
            scaffoldState.snackbarHostState.showSnackbar(message = message)
        }
    }

Normally, when I want to access to a compose element, I use the testTag in modifier. But the Snackbar does not have any. So how can I test that my Snackbar is shown with specific text?

I tried to use:

 composeRule.onNodeWithText(SNACKBAR_MESSAGE).assertIsDisplayed()

but it can't find any node.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人海汹涌 2025-01-16 16:53:19

我遇到了同样的问题,最终采取了以下措施以使我的测试通过:

composeTestRule.onNode(
    hasText(SNACKBAR_MESSAGE),
    useUnmergedTree = true
).assertIsDisplayed()

最重要的是包括 useUnmergedTree = true

I had the same issue, and ultimately resorted to the following in order to get my test to pass:

composeTestRule.onNode(
    hasText(SNACKBAR_MESSAGE),
    useUnmergedTree = true
).assertIsDisplayed()

What was of critical importance was including useUnmergedTree = true

書生途 2025-01-16 16:53:19

我们可以在snackbar修饰符中传递testtag并断言它。

Snackbar(
      modifier = Modifier
                  .padding(horizontal = 8.dp, vertical = 8.dp)
                  .testtag("Snackbar"))
         { 
            Text(text=label,modifider=Modifier.testtag("SnackBar_Text")
          }

测试代码

onNodeWithTag("Snackbar").assertIsDisplayed
onNodeWithTag("SnackBar_Text").assertIsDisplayed //can get text from config and assert the strings too

We can pass the testtag in snackbar modifier and we can assert it.

Snackbar(
      modifier = Modifier
                  .padding(horizontal = 8.dp, vertical = 8.dp)
                  .testtag("Snackbar"))
         { 
            Text(text=label,modifider=Modifier.testtag("SnackBar_Text")
          }

Testing Code

onNodeWithTag("Snackbar").assertIsDisplayed
onNodeWithTag("SnackBar_Text").assertIsDisplayed //can get text from config and assert the strings too
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文