Biblioteka Compose oferuje regułę ComposeTestRule, która umożliwia pisanie testów animacji w sposób deterministyczny z pełną kontrolą nad zegarem testowym. Dzięki temu możesz weryfikować pośrednie wartości animacji. Ponadto test może trwać krócej niż rzeczywisty czas trwania animacji.
Reguła ComposeTestRule udostępnia zegar testowy jako mainClock. Aby sterować zegarem w kodzie testowym, możesz ustawić właściwość autoAdvance na false. Po uruchomieniu animacji, którą chcesz przetestować, zegar można przesunąć do przodu za pomocą funkcji advanceTimeBy.
Pamiętaj, że funkcja advanceTimeBy nie przesuwa zegara dokładnie o określony czas trwania. Zaokrągla go 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 język JavaScript jest wyłączony.
- Testowanie układu Compose
- Inne kwestie, które warto wziąć pod uwagę
- Dostosowywanie animacji