Testare le animazioni

Compose offre ComposeTestRule che ti consente di scrivere test per le animazioni in modo deterministico con il pieno controllo dell'orologio di test. In questo modo puoi verificare i valori intermedi dell'animazione. Inoltre, un test può essere eseguito più velocemente della durata effettiva dell'animazione.

ComposeTestRule espone il proprio orologio di test come mainClock. Puoi impostare la proprietà autoAdvance su false per controllare l'orologio nel codice di test. Dopo aver avviato l'animazione che vuoi testare, l'orologio può essere spostato avanti con advanceTimeBy.

Tieni presente che advanceTimeBy non sposta l'orologio esattamente della durata specificata. ma lo arrotonda alla durata più vicina, ovvero un moltiplicatore della durata del frame.

@get:Rule
val rule = createComposeRule()

@Test
fun testAnimationWithClock() {
    // Pause animations
    rule.mainClock.autoAdvance = false
    var enabled by mutableStateOf(false)
    rule.setContent {
        val color by animateColorAsState(
            targetValue = if (enabled) Color.Red else Color.Green,
            animationSpec = tween(durationMillis = 250)
        )
        Box(Modifier.size(64.dp).background(color))
    }

    // Initiate the animation.
    enabled = true

    // Let the animation proceed.
    rule.mainClock.advanceTimeBy(50L)

    // Compare the result with the image showing the expected result.
    // `assertAgainGolden` needs to be implemented in your code.
    rule.onRoot().captureToImage().assertAgainstGolden()
}