Comments (5)
This Worked for me
fun rallyTopAppBarTest_tabSelectionChangesSelectedScreen() {
val allScreens = RallyScreen.values().toList()
var currentScreen by mutableStateOf(RallyScreen.Overview)
composeTestRule.setContent {
RallyTopAppBar(
allScreens = allScreens,
onTabSelected = {
currentScreen = it
},
currentScreen = currentScreen
)
}
composeTestRule.onNode(hasContentDescription(RallyScreen.Bills.name)).performClick()
assert(currentScreen.name == RallyScreen.Bills.name)
}
from codelab-android-compose.
@juyeop03
That's a nice solution. But it can be improved so that the test verifies that clicking on any of the tabs will change the selection.
Like this:
composeTestRule.setContent {
RallyApp()
}
val allScreens = RallyScreen.values().toList()
for (screen in allScreens) {
composeTestRule
.onNodeWithContentDescription(screen.name)
.performClick()
.assertIsSelected()
}
from codelab-android-compose.
@gagandeep3458
Thank you give to me a nice idea, your solution is awesome 👍
I also thought another method too, that is to use parent composable RallyApp
composeTestRule.setContent {
RallyTheme {
RallyApp()
}
}
composeTestRule
.onNodeWithContentDescription(RallyScreen.Bills.name)
.performClick()
.assertIsSelected()
from codelab-android-compose.
@gagandeep3458 Thank you. I have enhanced your solution to handle any combination of screens:
val allScreens = RallyScreen.values().toList()
val selectedScreen = allScreens.random() //pick a random screen name
val anotherScreen = allScreens.filterNot { it == selectedScreen }.random() //pick a random screen excluding selectedScreen
var currentScreen by mutableStateOf(selectedScreen)
composeTestRule.setContent {
RallyTopAppBar(
allScreens = allScreens,
onTabSelected = {
currentScreen = it
},
currentScreen = currentScreen
)
}
composeTestRule.onNodeWithContentDescription(anotherScreen.name)
.performClick()
.assertIsSelected()
}
from codelab-android-compose.
This is weird - I'm doing the following:
val allScreens = RallyScreen.entries //mock the screens
var selectedScreen: RallyScreen? = null
composeTestRule.setContent {
RallyTheme {
RallyTopAppBar(
allScreens = allScreens,
onTabSelected = { screen -> selectedScreen = screen},
currentScreen = RallyScreen.Accounts
)
}
}
composeTestRule.onNodeWithContentDescription(RallyScreen.Overview.name).performClick()
composeTestRule.onNodeWithContentDescription(RallyScreen.Overview.name).assertIsSelected()
assertEquals(RallyScreen.Overview, selectedScreen)
assertEquals is true, but the assertIsSelected fails.
from codelab-android-compose.
Related Issues (20)
- [TestingCodelab and NavigationCodelab] Running tests always fails HOT 1
- [NavigationCodelab] Arguments retrieved by navBackStackEntry HOT 2
- [AdvancedStateAndSideEffectsCodelab] Build failed HOT 1
- How should card components and attributes be imported? HOT 4
- [BasicLayoutsCodelab] only render AlignYourBodyRow when executing on emulator or physical device HOT 3
- [Accessibility] Reuse showFewerLabel
- Unnecessary, obscure way to shuffle a list in the Advanced State and Side Effects codelab?
- java.lang.IllegalArgumentException: Padding must be non-negative HOT 2
- BasicLayoutsCodelab does not use Material 3 HOT 1
- [NavigationCodelab] end branch is missing the navigation testing dependency.
- Check this box to trigger a request for Renovate to run again on this repository
- Update all dependencies (main)
- [Navigation CodeLab] Account type is not Changing and navigating to Overview Screen
- Why Camel Casing is used for variable names ? HOT 1
- [NavigationCodelab] UnknownPluginException: Plugin [id: 'com.diffplug.spotless', version: '6.21.0'] was not found HOT 1
- Getting set up HOT 1
- @Composable fun ArtistCardRow(artist: Artist) { Row(verticalAlignment = Alignment.CenterVertically) { Image(bitmap = artist.image, contentDescription = "Artist image") Column { Text(artist.name) Text(artist.lastSeenOnline) } } }(https://developer.android.com/jetpack/compose/layouts/basics#composable-functionshttps://developer.android.com/jetpack/compose/layouts/basics#composable-functionshttps://developer.android.com/jetpack/compose/layouts/basics#layout-goalshttps://developer.android.com/jetpack/compose/layouts/basics#standard-layouts@Composable fun ArtistCard() { Text("Alfred Sisley") Text("3 minutes ago") } "
- [BasicsLayoutCodelab][Step 4]: Deprecated feature usage
- [Crash] Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
- Repository clone mistake HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from codelab-android-compose.