টেস্ট কম্পোজ নেভিগেশন

আপনার কম্পোজেবল ডেস্টিনেশনগুলো থেকে ন্যাভিগেশন কোডকে বিচ্ছিন্ন করুন, যাতে প্রতিটি কম্পোজেবলকে NavHost কম্পোজেবল থেকে আলাদাভাবে পরীক্ষা করা যায়।

কোনো কম্পোজেবলে সরাসরি NavController পাস করবেন না। এর পরিবর্তে, নেভিগেশন কলব্যাক (ল্যাম্বডা) প্যারামিটার হিসেবে পাস করুন। এর ফলে আপনার সমস্ত কম্পোজেবল আলাদাভাবে পরীক্ষাযোগ্য হবে, কারণ টেস্টের জন্য সেগুলোর কোনো NavController ইনস্ট্যান্সের প্রয়োজন হয় না।

আপনার NavHost এর composable ল্যাম্বডা, নেভিগেশন এপিআই এবং আপনার কম্পোজেবলের মধ্যে একটি সেতু হিসেবে কাজ করে:

@Composable
fun ProfileScreen(
    userId: String,
    navigateToFriendProfile: (friendUserId: String) -> Unit
) {
 // …
}

// In your NavHost
composable<Profile> { backStackEntry ->
    val profile = backStackEntry.toRoute<Profile>()
    ProfileScreen(userId = profile.id) { friendUserId ->
        navController.navigate(route = Profile(id = friendUserId))
    }
}

এইভাবে, মক ভ্যালু এবং কলব্যাক পাস করার মাধ্যমে নেভিগেশন থেকে স্বাধীনভাবে ProfileScreen পরীক্ষা করা যেতে পারে।

আপনার অ্যাপের নেভিগেশন সংক্রান্ত প্রয়োজনীয়তাগুলো পূরণ করে এমন টেস্ট লেখার পরামর্শ দেওয়া হচ্ছে, যার মধ্যে NavHost , আপনার কম্পোজেবলগুলোতে পাঠানো নেভিগেশন অ্যাকশন এবং আপনার প্রতিটি স্ক্রিন কম্পোজেবল পরীক্ষা করা অন্তর্ভুক্ত থাকবে।

NavHost পরীক্ষা করুন

আপনার NavHost পরীক্ষা করা শুরু করতে, আপনার অ্যাপ মডিউলের build.gradle ফাইলে নিম্নলিখিত navigation-testing ডিপেন্ডেন্সিটি যোগ করুন:

dependencies {
  androidTestImplementation "androidx.navigation:navigation-testing:$navigationVersion"
}

আপনার অ্যাপের NavHost একটি composable-এর মধ্যে রাখুন, যা প্যারামিটার হিসেবে একটি NavHostController গ্রহণ করে:

@Composable
fun AppNavHost(navController: NavHostController){
  NavHost(navController = navController, startDestination = Home){
      composable<Home> { /*...*/ }
      composable<Profile> { /*...*/ }
  }
}

এখন আপনি নেভিগেশন টেস্টিং আর্টিফ্যাক্ট TestNavHostController এর একটি ইনস্ট্যান্স পাস করে AppNavHost এবং NavHost ভেতরে সংজ্ঞায়িত নেভিগেশন লজিক পরীক্ষা করতে পারেন।

আপনার অ্যাপের শুরুর গন্তব্য এবং NavHost যাচাই করার জন্য একটি UI টেস্ট দেখতে এইরকম হবে:

class NavigationTest {

    @get:Rule
    val composeTestRule = createComposeRule()
    lateinit var navController: TestNavHostController

    @Before
    fun setupAppNavHost() {
        composeTestRule.setContent {
            navController = TestNavHostController(LocalContext.current)
            navController.navigatorProvider.addNavigator(ComposeNavigator())
            AppNavHost(navController = navController)
        }
    }

    @Test
    fun appNavHost_verifyStartDestination() {
        composeTestRule
            .onNodeWithContentDescription("Start Screen")
            .assertIsDisplayed()
    }
}

নেভিগেশন ক্রিয়াকলাপ পরীক্ষা করুন

আপনি আপনার নেভিগেশন বাস্তবায়ন বিভিন্ন উপায়ে পরীক্ষা করতে পারেন; যেমন, UI এলিমেন্টগুলিতে ক্লিক করে প্রদর্শিত গন্তব্য যাচাই করা অথবা প্রত্যাশিত রুটের সাথে বর্তমান রুটের তুলনা করা।

যেহেতু আপনি আপনার নির্দিষ্ট অ্যাপের বাস্তবায়ন পরীক্ষা করতে চান, তাই UI-তে ক্লিক করাই শ্রেয়। স্বতন্ত্র কম্পোজেবল ফাংশনগুলোর পাশাপাশি এটি কীভাবে পরীক্ষা করতে হয় তা জানতে, “ Testing in Jetpack Compose” কোডল্যাবটি দেখুন।

আপনি navController ব্যবহার করে currentBackStackEntry মাধ্যমে বর্তমান রুটকে প্রত্যাশিত রুটের সাথে তুলনা করে নেভিগেশন অ্যাসারশন পরীক্ষা করতে পারেন।

@Test
fun appNavHost_clickProfile_navigatesToProfile() {
    composeTestRule.onNodeWithContentDescription("Go to Profile")
        .performClick()

    assertTrue(navController.currentBackStackEntry?.destination?.hasRoute<Profile>() ?: false)
}

Compose টেস্টিং-এর প্রাথমিক বিষয়গুলো সম্পর্কে আরও নির্দেশনার জন্য, “Testing your Compose layout” গাইডটি দেখুন।