#android-jetpack-compose #robolectric
#android-jetpack-сочинение #роболектрический
Вопрос:
У меня есть составная часть с кнопкой, которая запускает одно из собственных действий (настройки Google). Чтобы проверить это перед составлением (с помощью Robolectric) Я бы сделал что-то подобное:
Мой тест:
@Test fun `MyFragment - when button clicked - starts activity`() { ... val shadowActivity: ShadowActivity = Shadow.extract(activity) val nextStartedActivity = shadowActivity.nextStartedActivity assertNotNull(nextStartedActivity) assertEquals(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, nextStartedActivity.action) }
С составными тестами (без использования сценария активности) все по-другому. Там нет дескриптора активности, только composeTestRule:
Мой тест:
... private val buttonNode get() = composeTestRule.onNodeWithContentDescription("Button") @Test fun `MyComposableToTest - when button clicked - starts activity`() { composeTestRule.setContent { MyComposableToTest() } buttonNode.assertExists().assertHasClickAction().assertIsEnabled().performClick() // No possibility to get current activity }
Как я могу утверждать, что при тестировании составного элемента запускается новое действие?
Некоторый контекст:
- Плагин для Android 7.0.3
- Роболектрика 4.7.3
- Составьте 1.1.0-beta04
Ответ №1:
Вы можете извлечь контекст из ComposeContentTestRule следующим образом:
lateinit var context : Context composeTestRule.setContent { context = LocalContext.current MyComposableToTest() }
а затем утвердить следующую начатую деятельность
val shadowActivity: ShadowActivity = Shadow.extract(context as ComponentActivity) val nextStartedActivity = shadowActivity.nextStartedActivity assertEquals(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, nextStartedActivity.action)