בדיקת האנימציות

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