dimanche 7 février 2021

How to pass a cutom navOptions during testing

I have a custom animation that I pass during navigation in my fragments, How can I pass a navOptions to navigation during testing. Here is my custom navOption

fun Fragment.customNavAnimation(): NavOptions.Builder {
val navBuilder: NavOptions.Builder = NavOptions.Builder()
navBuilder.setEnterAnim(R.anim.slide_in_right).setExitAnim(R.anim.slide_out_left)
    .setPopEnterAnim(R.anim.slide_in_left).setPopExitAnim(R.anim.slide_out_right)
return navBuilder

Here is how I passed it

  ui.loginBtn.setOnClickListener {
        findNavController().navigate(R.id.loginFragment, null, customNavAnimation().build())
    }

Here is my test

  @Test
fun clickCreateAccountButton_NavigateToSignUpFragment(){
    //creates a mock of the navController class
    val navController = Mockito.mock(NavController::class.java)


    //launch fragment
    launchFragmentInHiltContainer<LandingFragment> {
        //assign a new navController to this fragment
        Navigation.setViewNavController(requireView(), navController)
    }
    //click on create account button
    Espresso.onView(withId(R.id.create_account_btn))
        .perform(ViewActions.click())

    //verify if navController was called
    Mockito.verify(navController).navigate(R.id.registerFragment, null, null  )

}

when I pass in null as navOptions I get this error

Argument(s) are different! Wanted: navController.navigate( 2131362353, null, null ); -> at com.plentahub.breezcoins_android.ui.LandingFragmentTest.clickCreateAccountButton_NavigateToSignUpFragment(LandingFragmentTest.kt:51) Actual invocation has different arguments: navController.navigate( 2131362353, null, androidx.navigation.NavOptions@369fdd89 );

My problem now is how to pass in the custom navOptions

Aucun commentaire:

Enregistrer un commentaire