Biblioteka Compose oferuje ComposeTestRule
, która umożliwia pisanie testów animacji w sposób deterministyczny z pełną kontrolą nad zegarem testu. Umożliwia to sprawdzenie
wartości pośrednich animacji. Poza tym test może trwać krócej niż rzeczywisty czas trwania animacji.
ComposeTestRule
udostępnia zegar testowy jako mainClock
. Możesz ustawić wartość właściwości autoAdvance
na false, aby kontrolować zegar w kodzie testu. Po uruchomieniu animacji, którą chcesz przetestować, możesz przesunąć zegar do przodu, klikając advanceTimeBy
.
Warto pamiętać, że funkcja advanceTimeBy
nie przesuwa zegara dokładnie o określony czas. Zamiast tego zaokrągla ją w górę do najbliższego czasu trwania, który jest wielokrotnością czasu trwania klatki.
@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() }
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony.
- Testowanie układu Compose
- Inne kwestie, które warto wziąć pod uwagę
- Dostosowywanie animacji {:#customize-animations}