ב-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() }
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- בדיקת פריסת הכתיבה
- שיקולים נוספים
- התאמה אישית של אנימציות {:#customize-animations}