https://kotlinlang.org logo
#colombia
Title
# colombia
m

marlonlom

03/14/2024, 5:29 PM
Buen dia, Pregunta: en un viewmodel, tengo una funcion de consulta por texto, el texto lo tengo como mutableState, al momento en que se actualiza el texto, debo ejecutar una funcion suspend para hacer la busqueda; aparte, tengo un mutable state sobre el state de los resultados de la consulta. Al momento de la actualizacion del texto, si este ultimo es vacio, el estado es
none
, y si no, se pasa a
searching
, en este punto es donde debo realizar la busqueda, sobre la cual, dependiendo del listado de resultados, el state pasa a
empty
o a
success
.. Cómo puedo hacer que se ejecute la función de consulta dado el state? en lo que llevo haciendo, si hay texto no vacio, el state al momento de hacer collect sale
searching
y no
empty/success
😞
a

Alejandro Rios

03/14/2024, 8:59 PM
Creo mas no estoy seguro de q podrias usar un debouncer para ese caso: https://medium.com/@NickFan34818768/debounce-kotlin-coroutines-11ca151d12e8
m

marlonlom

03/14/2024, 10:24 PM
el debouncer debo pasarselo en una prueba unitaria? private val searchDebouncer = Debouncer(400) nota: en serio llevo varios dias con este tema
usando el debouncer custom del ejemplo, me sale este error:
kotlinx.coroutines.test.UncompletedCoroutinesError: After waiting for 1m, the test coroutine is not completing
a

Alejandro Rios

03/14/2024, 11:16 PM
Prueba usando turbine para hacer q pase ese tiempo hasta el siguiente estado, supongo q estás con compose y estás tratando de probar un uistate
m

marlonlom

03/15/2024, 4:55 PM
probando con mockk y turbine, me sale este error:
kotlinx.coroutines.CoroutinesInternalError: Fatal exception in coroutines machinery for DispatchedContinuation[Dispatchers.IO, Continuation at dev.marlonlom.apps.cappajv.features.catalog_list.CatalogListRepository$fetchCatalogItems$2.invokeSuspend(CatalogListRepository.kt)@11a67ce0]. Please read KDoc to 'handleFatalException' method and report this incident to maintainers
a

Alejandro Rios

03/15/2024, 5:27 PM
No sabría q podría estar causandote ese error, pero validaste aplicando el coroutine rule mencionan en el segundo articulo?, creería q es por eso
m

marlonlom

03/15/2024, 6:30 PM
si, @Alejandro Rios, tengo un maincocoutine rule, he actualizado kotlinx-coroutines-test, incluso inclui mockk... al ejecutar las pruebas unitarias fallan y por momentos me sale el coroutinesinternalerror
leyendo un poco sobre mockk y kotlinx-coroutines-test, parece hay issues sobre esas dos librerias:
mockk -> https://github.com/mockk/mockk/issues/1078
kotlinx-coroutines-test -> https://github.com/Kotlin/kotlinx.coroutines/issues/3705
a

Alejandro Rios

03/18/2024, 2:39 PM
Si pudiste resolverlo?, como lo hiciste?
m

marlonlom

03/18/2024, 9:15 PM
@Alejandro Rios Hola, revisando en stackoverflow <https://stackoverflow.com/questions/77743697/while-updating-the-kotlin-version-from-1-7-10-to-1-9-10-multiple-test-cases-are> encontré un topic sobre una clase llamada
RethrowingExceptionHandler
.. utilice esta clase y las pruebas salieron exitosas. Si bien, aún tengo la duda de cómo eso solucionó el tema de que en github actions las pruebas donde uso mocks fallan (en localhost funcionan bien ) ...
👍 1