У меня есть настольное приложение. Его исходный код представляет собой множество компонуемых функций в отдельные файлы *.kt, например
@Composable
fun MyView()
...
И теперь мне нужно написать UI-тест для этих функций в другом файле.
@OptIn(ExperimentalTestApi::class)
@get:Rule
val rule = createComposeRule(???)
Я нашел пример тестирования пользовательского интерфейса приложения Android:
class ExampleInstrumentedTest {
@get:Rule
val composeTestRule = createAndroidTestRule(MainActivity::class.java)
Но в моем настольном приложении Compose Multiplatform у меня нет действий. Как я могу использовать функцию MyView() при создании правила составления теста в этом случае?
createComposeRule
не принимает никаких параметров, является заводской функцией.
Есть хороший документ о том, как использовать эту функцию и вообще составлять тесты.
Создать правило
@get:Rule val composeTestRule = createComposeRule()
(В тесте) Примените свой контент к правилу
composeTestRule.setContent {
MainScreen(uiState = fakeUiState, /*...*/)
}
Проверьте видимость некоторого узла
composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()
Редактировать
Если вышеизложенное не работает с Compose для настольных компьютеров, я рекомендую заглянуть в тестовую библиотеку JetBrains.
@OptIn(ExperimentalTestApi::class)
@Test
fun myTest() = runComposeUiTest {
setContent { MainScreen(uiState = fakeUiState, /*...*/) }
onNodeWithTag("text").assertTextEquals("Compose")
}
Спасибо! Меня устраивает! И следует ли мне добавлять семантические теги для всех моих элементов управления, созданных составными функциями, чтобы получить к ним доступ здесь, в правиле?