اختبار الصور المتحركة

يوفّر 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()
}