Тестовые анимации

Compose предлагает ComposeTestRule , который позволяет вам писать тесты для анимации детерминированным способом с полным контролем над тактовой частотой теста. Это позволяет вам проверять промежуточные значения анимации. Кроме того, тест может выполняться быстрее, чем фактическая продолжительность анимации.

ComposeTestRule предоставляет свои тестовые часы как mainClock . Вы можете установить для свойства autoAdvance значение false, чтобы управлять часами в тестовом коде. После запуска анимации, которую вы хотите протестировать, часы можно перевести вперед с помощью advanceTimeBy .

Здесь следует отметить, что advanceTimeBy не перемещает часы точно на указанную продолжительность. Скорее, он округляет его до ближайшей продолжительности, которая является множителем длительности кадра.

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

{% дословно %} {% дословно %} {% дословно %} {% дословно %}