Compose offers 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 מושבת
- בדיקת הפריסה של חלון הכתיבה
- שיקולים נוספים
- התאמה אישית של אנימציות