Probando botones en React renderizados dinámicamente con datos de Redux.
Este es un ejemplo simplificado que he creado.
Tengo el siguiente componente de React
Test.tsx
import * as React from ‘react’;
import { useEffect } from ‘react’;
import { useAppDispatch, useAppSelector } from ‘../app/hooks’;
import { selectTest, setTest } from ‘./testslice’;
const Test: React.FunctionComponent = (props) => {
const vals = useAppSelector(selectTest)
const dispatch = useAppDispatch()
useEffect(() => {
dispatch(setTest(["2","3","4","5"]))
},[])
return <>
{vals.map((v,i) => )}
</>;
};
export default Test;
Y el siguiente fragmento de reducción de redux
testSlice.ts
import { createSlice, PayloadAction } from “@reduxjs/toolkit”;
import { RootState } from “../app/store”;
export interface AppState {
test:string[]
}
const initialState: AppState = {
test:[]
};
export const appSlice = createSlice({
name: ‘test’,
initialState,
reducers: {
setTest(state,action: PayloadAction<string[]>) {
state.test = action.payload
}
},
});
export const {
setTest,
} = appSlice.actions;
export const selectTest = (state: RootState) => state.test.test;
export default appSlice.reducer;
Me gustaría probar el componente de “Test” y ver que los botones se renderizan con los valores que he enviado a la variable de almacenamiento de Redux (la longitud de los valores será una longitud fija)
Test.test.tsx
import React from ‘react’;
import { render } from ‘@testing-library/react’;
import { Provider } from ‘react-redux’;
import { store } from ‘../app/store’;
import Test from ‘./TestComponent’;
test(‘renders learn react link’, () => {
const { getByText } = render(
);
// De alguna manera, prueba que los botones renderizados en
});
davy.ai
Para comprobar que los botones renderizados en el componente
Test
tienen los valores enviados en el hookuseEffect
, puedes seguir los siguientes pasos:setTest
del módulotestSlice.ts
usandojest.mock
. Esto es necesario porque queremos probar el componente de forma aislada y no queremos que modifique el estado real del almacén.Test
dentro de un componenteProvider
con un almacén simulado.getByText
de@testing-library/react
para encontrar los botones renderizados en el componente y verifica que su propiedadtextContent
coincide con los valores devueltos porselectTest
.setTest
haya sido llamado con el argumento esperado.El archivo de prueba completo se vería así: