Przetestuj animacje

Funkcja tworzenia udostępnia ComposeTestRule, która umożliwia pisanie testów animacji w sposób deterministyczny z pełną kontrolą nad zegarem testowym. Pozwoli Ci to zweryfikować pośrednie wartości animacji. Poza tym test może trwać dłużej niż czas trwania animacji.

ComposeTestRule pokazuje swój zegar testowy jako mainClock. Możesz ustawić właściwość autoAdvance na wartość false, aby sterować zegarem w kodzie testowym. Po zainicjowaniu animacji, którą chcesz przetestować, możesz przesunąć zegar za pomocą funkcji advanceTimeBy.

Warto zapamiętać, że advanceTimeBy nie przesuwa zegara dokładnie o określoną wartość czasu trwania. Zamiast tego zaokrągla go do najbliższej długości, która jest mnożnikiem czasu trwania klatki.

@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()
}