Как утверждать следующее начатое действие для составного теста?

#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)