Przetestuj animacje

Biblioteka Compose oferuje regułę ComposeTestRule, która umożliwia pisanie testów animacji w sposób deterministyczny z pełną kontrolą nad zegarem testowym. Dzięki temu możesz weryfikować pośrednie wartości animacji. Ponadto test może trwać krócej niż rzeczywisty czas trwania animacji.

Reguła ComposeTestRule udostępnia zegar testowy jako mainClock. Aby sterować zegarem w kodzie testowym, możesz ustawić właściwość autoAdvance na false. Po uruchomieniu animacji, którą chcesz przetestować, zegar można przesunąć do przodu za pomocą funkcji advanceTimeBy.

Pamiętaj, że funkcja advanceTimeBy nie przesuwa zegara dokładnie o określony czas trwania. Zaokrągla go do najbliższego czasu trwania, który jest wielokrotnością 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()
}