【发布时间】:2022-11-27 06:58:09
【问题描述】:
问题是: 我们有一个测试用例,我们希望调用回调函数以响应可组合项中的点击操作。我们如何正确处理这个测试?
【问题讨论】:
问题是: 我们有一个测试用例,我们希望调用回调函数以响应可组合项中的点击操作。我们如何正确处理这个测试?
【问题讨论】:
你可以尝试这样的事情:
@Test
fun test() {
var clicked = false
testRule.setContent {
YourComposable(
onClick = { clicked = true },
}
}
testRule.onNodeWithTag("YourButton")
.performClick()
assertTrue(clicked)
}
【讨论】:
我不确定你是否理解state hoisting,reference请尝试简单的例子:
@Composable
fun ButtonState(modifier : Modifier = Modifier,state : (flag : Boolean)->Unit) {
var isFlag by remember{ mutableStateOf(false)}
Button(onClick = {
isFlag = !isFlag
state(isFlag)
},modifier) {
Text(text = "text")
}
}
setContent {
var flag by remember { mutableStateOf(false) }
Column {
ButtonState {
flag = it
}
Text(text = "$flag")
}
}
【讨论】:
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun `should invoke callback on button click`() {
val callback : () -> Unit = mockk()
composeTestRule.setContent {
YourComposable(
onClick = callback,
)
}
composeTestRule.onNodeWithTag("BUTTON_TAG").performClick()
verify { callback() }
}
【讨论】: