Improve error displayed when the Unconsumed Event cannot be displayed.

This commit is contained in:
Benoit Marty 2025-11-07 12:51:35 +01:00
parent 2625c75ac9
commit b871725423

View file

@ -12,6 +12,7 @@ import app.cash.molecule.moleculeFlow
import app.cash.turbine.TurbineTestContext
import app.cash.turbine.test
import io.element.android.libraries.architecture.Presenter
import org.junit.Assert.fail
import kotlin.time.Duration
suspend fun <State> Presenter<State>.test(
@ -19,7 +20,20 @@ suspend fun <State> Presenter<State>.test(
name: String? = null,
validate: suspend TurbineTestContext<State>.() -> Unit,
) {
moleculeFlow(RecompositionMode.Immediate) {
present()
}.test(timeout, name, validate)
try {
moleculeFlow(RecompositionMode.Immediate) {
present()
}.test(timeout, name, validate)
} catch (t: Throwable) {
if (t::class.simpleName == "KotlinReflectionInternalError") {
// Give a more explicit error to the developer
fail("""
It looks like you have an unconsumed event in your test.
If you get this error, it means that your test is missing to consume one of several events.
You can fix by consuming and check the event with `awaitItem()`, or you can also invoke
`cancelAndIgnoreRemainingEvents()`.
""".trimIndent())
}
throw t
}
}