es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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()
})

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para probar un selector en redux-saga-flow, es necesario utilizar el método provide de la biblioteca redux-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:

    test("Obtener datos del almacenamiento", () => {
      return expectSaga(testedSagaFlow)
        .provide([[matchers.select(selector), {data: "algunos datos"}]])
        .select(selector)
        .not.put(otherAction)
        .run();
    });
    

    Este bloque de código indica al plan de prueba que intercepte el método select y devuelva un objeto con la propiedad data 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 devolver data directamente:

    const selector = (state) => {
       console.log("selector");
       return { data: someData };
    }
    

    En cuanto a la prueba unitaria, puedes usar el método expectSaga de redux-saga-test-plan para probar el flujo de saga sin ejecutar las sagas reales. Aquí tienes un ejemplo:

    test("Prueba unitaria del flujo de saga", () => {
      return expectSaga(testedSagaFlow)
        .provide([[matchers.select(selector), null]])
        .not.put(otherAction)
        .run(false); // desactiva los efectos secundarios reales
    });
    

    Este bloque de código prueba si testedSagaFlow maneja correctamente el caso en el que el selector devuelve null.

    Ten en cuenta que no es necesario llamar el método next en la prueba unitaria, ya que expectSaga se encarga de la ejecución del flujo de saga por ti.

    Además, al pasar false al método run, 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.

Comments are closed.