我正在使用 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()
但是找不到任何节点。
我们可以在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
我遇到了同样的问题,最终采取了以下方法以使我的测试通过:
composeTestRule.onNode(
hasText(SNACKBAR_MESSAGE),
useUnmergedTree = true
).assertIsDisplayed()
最重要的是包括
useUnmergedTree = true