Как настроить NavHost для тестирования пользовательского интерфейса Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как настроить NavHost для тестирования пользовательского интерфейса Android?

Сообщение Anonymous »

java.lang.IllegalArgumentException: невозможно перейти к NavDeepLinkRequest { uri=android-app://androidx.navigation/movies/ }. Граф навигации не установлен для NavController androidx.navigation.testing.TestNavHostController@1d694be.
Я не знаю, как явно задать граф навигации для 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")
}
}
Я создал TestNavGraph для этого теста, но это не решило проблему

Подробнее здесь: https://stackoverflow.com/questions/787 ... ui-testing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»