Estoy tratando de probar cómo un buttonClick cambiaría la interfaz de usuario.
La prueba se configura así:
composeRule.setContent { var i by remember { mutableStateOf(0) } Button(modifier = Modifier.testTag("TEST"), onClick = { i++ }) { Text(text = i.toString()) } }Y mi prueba real se ve así:
val button = composeRule.onNodeWithTag("TEST") button.assertTextEquals("0") button.performClick() button.printToLog("Test") button.assertTextEquals("1") La primera afirmación pasa, sin embargo, falla al verificar que el texto debe ser igual a 1 :
java.lang.AssertionError: Failed to assert the following: (Text + EditableText = [1]) Semantics of the node: Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST' Role = 'Button' Text = '[0]' Actions = [OnClick, GetTextLayoutResult] MergeDescendants = 'true' Selector used: (TestTag = 'TEST')El printToLog() después del clic se ve así:
Printing with useUnmergedTree = 'false' Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST' Role = 'Button' Text = '[0]' Actions = [OnClick, GetTextLayoutResult] MergeDescendants = 'true'Por lo tanto, parece que cuando se realiza el clic, el contenido no se recompone o, por alguna razón, el clic en realidad no se produce.
¿Alguien sabe qué puede estar pasando aquí?
¡Resolví este problema!
Mi emulador estaba ejecutando el nivel de API 32. Parece que Compose Interaction Library aún no funciona completamente con 32.
El código funcionó sin ningún cambio después de degradar el nivel de la API.