цвет кнопки подтверждения - MaterialTheme.colors.primary в составном
У меня есть простая кнопка. Его набор цветов устанавливается на основе условия, и я хочу проверить, что правильный цвет применяется из MaterialTheme, но тест не проходит, говоря @Compos
@Composable
fun Btn(shopState: Int) {
//set color based on the state now, default being primary
var color = MaterialTheme.colors.primary
if (shopState == 2) {...}
else if (shopState == 3) {...}
Button(onClick = {
/*
call calculation method passing the current value of shopState
*/
}) {
Text(text = "Calculate", color = color)
}
}
Тестовый файл сейчас (скопирован из SO):
fun SemanticsNodeInteraction.assertButtonColor(expectedColor: Color) {
val capturedName = captureToImage().colorSpace.name
assertEquals(expectedColor.colorSpace.name, capturedName)
}
но когда я сделаю:
composeTestRule.onNodeWithText("Calculate").assertButtonColor(MaterialTheme.colors.primary)
он не запускается с красной линией под свойством цветов MaterialTheme: вызовы @Composable могут происходить только из @Composables.
Как я могу утверждать, что MaterialTheme.colors.primary применяется в настоящее время?
1 ответ
Вы можете использовать что-то вроде:
import com.google.common.truth.Truth.assertThat
@Test
fun bottonColorTest() {
var onPrimary = Color.Transparent
var content = Color.Transparent
rule.setContent {
onPrimary = MaterialTheme.colors.onPrimary
Button(onClick = {}) {
content = LocalContentColor.current
}
}
assertThat(content).isEqualTo(onPrimary)
}
Чтобы импортироватьcom.google.common.truth.Truth.assertThat
добавьте в свою зависимость:
androidTestImplementation "com.google.truth:truth:1.1.3"