Espresso 检查 AndroidX 导航中下一个片段的内容

问题描述 投票:0回答:1

我正在使用 Espresso 测试登录功能,只要我检查导航操作是否会将用户带到具有正确 ID 的片段,它就可以正常工作。

@Test
fun loginLogout() {
    val fragmentArgs = bundleOf("numElements" to 0)
    val navController = TestNavHostController(ApplicationProvider.getApplicationContext())
    val titleScenario = launchFragmentInContainer<LoginFragment>(fragmentArgs, R.style.Theme_Ticketsmspayapp)

    titleScenario.onFragment { fragment ->
        navController.setGraph(R.navigation.graph_home)
        Navigation.setViewNavController(fragment.requireView(), navController)
    }
    
    // Login details filling and confirming

    assertEquals(navController.currentDestination?.id, R.id.eventsFragment)

    onView(ViewMatchers.withId(R.id.logout)).perform(ViewActions.click())
}

接下来我想做的是按下正在打开的片段中包含的注销按钮,但看起来

onView
仍然指的是登录片段的视图。 单个测试是否可以遵循导航图的视图层次结构?

android android-espresso android-architecture-navigation
1个回答
0
投票

TestNavHostController
具体来说,实际上不会显示任何片段 - 它依赖于其他测试基础设施(如
launchFragmentInContainer
)来实际创建测试下的单个片段。

因此,即使您在

navigate
上调用
TestNavHostController
,您的测试中的单个片段仍将显示在屏幕上 - 您的测试应该做的就是验证您的
LoginFragment
是否正确调用
navigate
根据您提供的输入确定正确的时间。

当您调用

NavHostFragment
时,您不需要测试附加到真实
NavController
的真实
navigate
是否实际替换了您的 Fragment - 这不是 您的代码,而是已经 被广泛测试覆盖的代码套房.

但是,如果您确实想编写完整的集成样式测试,那么您不会使用

TestNavHostController

,而是测试您的完整活动并使用您活动中实际的 
NavHostFragment

© www.soinside.com 2019 - 2024. All rights reserved.