Testare le animazioni

Compose offre ComposeTestRule che ti consente di scrivere test per le animazioni in modo deterministico con il pieno controllo sull'orologio di test. In questo modo puoi verificare i valori intermedi dell'animazione. Inoltre, un test può essere eseguito più rapidamente rispetto alla 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, puoi far avanzare l'orologio con advanceTimeBy.

Tieni presente che advanceTimeBy non sposta l'orologio esattamente in base alla durata specificata. Viene invece arrotondata per eccesso alla durata più vicina che è 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()
}