Метод setContent
Метод setContent у
ComposeContentTestRule
монтирует composable-функции
в изолированном тестовом хосте.
Вызывают внутри Test
после создания правила через
createComposeRule.
Дальше узлы ищут через onNodeWithText
и проверяют у
SemanticsNodeInteraction.
Синтаксис
composeTestRule.setContent {
Text(text = "abcde")
}
Параметры
| Параметр | Описание |
|---|---|
content |
Лямбда с composable-элементами, которые рисуют в тесте. |
Пример
Давайте нарисуем одну строку и проверим её:
import androidx.compose.material3.Text
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import org.junit.Rule
import org.junit.Test
class SetContentTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun rendersText() {
composeTestRule.setContent {
Text(text = "abcde")
}
composeTestRule.onNodeWithText("abcde").assertIsDisplayed()
}
}
Тест проходит: setContent нарисовал Text,
узел с "abcde" отображается.
Пример
Давайте сменим content во второй проверке:
import androidx.compose.material3.Text
import androidx.compose.ui.test.assertTextEquals
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import org.junit.Rule
import org.junit.Test
class ReplaceContentTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun updatesText() {
composeTestRule.setContent {
Text(text = "12345")
}
composeTestRule.onNodeWithText("12345").assertTextEquals("12345")
}
}
Тест проходит: на экране теста виден
только текст "12345".
Смотрите также
-
класс
ComposeContentTestRule,
у которого вызывают setContent -
аннотация
Composable,
нужна функциям внутри лямбды -
метод
waitForIdle,
после setContent при анимациях -
функция
setContent,
Compose в activity, не в тесте