How can we test Jetpack Compose callback function on a click action?

Viewed 341

The problem is: We have a test case where we expect that a callback function was called in response to a click action in our Composable. How can we handle this test correctly?

2 Answers

You can try something like this:

@Test
fun test() {
    var clicked = false

    testRule.setContent {
        YourComposable(
            onClick = { clicked = true },
        }
    }

    testRule.onNodeWithTag("YourButton")
            .performClick()
    assertTrue(clicked)
}

I'm not sure if you understand state hoisting,reference please try simple example:

@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")
    }
}
Related