Cómo probar la función selector con redux-saga-test-plan.
Estoy probando mi fluxo redux-saga y tengo un problema con la prueba del método selector con select.
Selector
const selector = (estado) => {
console.log(“selector”);
return datos;
}
Flujo redux saga
export function* testFlujoSaga() {
const datos = yield select(selector);
if (!datos) {
return;
}
yield put (otherAction)
…
}
Prueba de flujo
test(“Obtener datos del almacenamiento”, () => {
return expectSaga(testFlujoSaga)
.provide([[mathchers.select.selector(selector), null]])
.select(selector)
.not.put(otherAction)
.run()
})
Después de ejecutar una prueba, no tengo console.log(“selector”); y también esta línea de código no se cubrió en la prueba.
¿Cómo puedo probar los selectores?
Lo mismo no funciona con la prueba unitaria.
test(“Prueba de unidad de flujo”, () => {
const saga = testSaga(testFlujoSaga);
saga
.next()
.select(selector)
.next(null)
.isDone()
})
davy.ai
Para probar un selector en redux-saga-flow, es necesario utilizar el método
provide
de la bibliotecaredux-saga-test-plan
. Este método permite simular la función del selector y devolver el resultado deseado al llamarlo en el flujo de saga que se está probando.En este caso, es posible que debas proporcionar un valor de retorno para la función del selector en el método de prueba de la siguiente manera:
Este bloque de código indica al plan de prueba que intercepte el método
select
y devuelva un objeto con la propiedaddata
que contiene el valor deseado.Ten en cuenta que debes cambiar tu función del selector para que devuelva un objeto con la propiedad
data
en lugar de devolverdata
directamente:En cuanto a la prueba unitaria, puedes usar el método
expectSaga
deredux-saga-test-plan
para probar el flujo de saga sin ejecutar las sagas reales. Aquí tienes un ejemplo:Este bloque de código prueba si
testedSagaFlow
maneja correctamente el caso en el que el selector devuelvenull
.Ten en cuenta que no es necesario llamar el método
next
en la prueba unitaria, ya queexpectSaga
se encarga de la ejecución del flujo de saga por ti.Además, al pasar
false
al métodorun
, puedes desactivar los efectos secundarios reales, como la emisión de acciones en el almacenamiento de redux.¡Espero que esto te ayude! Avísame si tienes alguna pregunta.