使用jetpack compose时在android测试中测试snack bar

问题描述 投票:0回答:2

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

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

通常,当我想要访问撰写元素时,我会使用

testTag
中的
modifier
。但 Snackbar 没有。那么我如何测试我的 Snackbar 是否显示特定文本?

我尝试使用:

 composeRule.onNodeWithText(SNACKBAR_MESSAGE).assertIsDisplayed()

但是找不到任何节点。

android testing android-jetpack-compose android-testing android-snackbar
2个回答
0
投票

我们可以在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

0
投票

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

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

最重要的是包括

useUnmergedTree = true

© www.soinside.com 2019 - 2024. All rights reserved.