Я не знаю, как явно задать граф навигации для navHost
Как предоставить такие тесты?
Экранный тест:
Код: Выделить всё
@Composable
fun TestNavGraph(navController: NavHostController) {
NavHost(navController = navController, startDestination = "start") {
composable("start") { Text("Start Screen") }
composable("movies/") { Text("Movies Screen") }
composable("movies/{movieId}") { backStackEntry ->
val movieId = backStackEntry.arguments?.getString("movieId")
Text("Movie Details Screen for $movieId")
}
}
}
class ScreensTest {
@get:Rule
val composeTestRule = createAndroidComposeRule()
@Test
fun testMoviesNavigation() {
// Create a test NavController
val navController = TestNavHostController(composeTestRule.activity)
val screens = Screens(navController)
// Setup your Composable with the TestNavHostController
composeTestRule.activity.setContent {
TestNavGraph(navController = navController)
}
// Perform navigation
screens.movies()
// Assert navigation action
assertEquals("movies/", navController.currentBackStackEntry?.destination?.route)
}
@Test
fun testMovieDetailsNavigation() {
// Create a test NavController
val navController = TestNavHostController(composeTestRule.activity)
val screens = Screens(navController)
// Setup your Composable with the TestNavHostController
composeTestRule.setContent {
screens.movieDetails(42)
}
// Perform navigation
screens.movieDetails(42)
// Assert navigation action
assertEquals("movies/42", navController.currentBackStackEntry?.destination?.route)
}
}
Код: Выделить всё
package com.romahduda.movies30.navigation
import androidx.navigation.NavHostController
import com.romahduda.movies30.util.Constants.MOVIES_SCREEN
class Screens(navController: NavHostController) {
val movies: () -> Unit = {
navController.navigate("movies/"){
popUpTo(MOVIES_SCREEN) {inclusive = true}
}
}
val movieDetails: (Int) -> Unit = {movieId ->
navController.navigate("movies/$movieId")
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ui-testing
Мобильная версия