I am trying to learn how to test with Jetpack Compose and I'm feeling lost. I'm not sure what I am doing wrong. I want to test the MainScreen, but it is nested in a ScreenNavigation() and needs a ViewModel and a NavController. I'm really confused how this works. It is telling me it can't find the activity. Im not sure what to do in the AndroidManifest file. Any help is very much appreciated!
Error: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.samm.brewerysearch.test/androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity}; have you declared this activity in your AndroidManifest.xml, or does your intent not match its declared ?
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<application
android:name="com.samm.brewerysearch.BrewApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Bloomberg"
tools:targetApi="31">
<activity
android:name="com.samm.brewerysearch.MainActivity"
android:exported="true"
android:theme="@style/Theme.Bloomberg">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
@HiltAndroidTest
@UninstallModules(AppModule::class)
class MainScreenTest {
@get:Rule(order = 0)
val hiltRule = HiltAndroidRule(this)
@get:Rule(order = 1)
val composeRule = createAndroidComposeRule<MainActivity>()
@Before
fun setUp() {
hiltRule.inject()
composeRule.setContent {
val navController = rememberNavController()
BreweryTheme {
NavHost(
navController = navController,
startDestination = Screens.MainScreen.name
){
composable(Screens.MainScreen.name){
MainScreen(
navController = navController,
mainViewModel = hiltViewModel(),
search = Constants.DEFAULT_CITY
)
}
}
}
}
}
@Test
fun myTest(){
composeRule.onNodeWithText(Constants.DEFAULT_CITY).assertIsDisplayed()
}
}