Pruebas con Enzyme
*
Render vs Shallow vs Mount
Pruebas para CounterApp
Enzyme es tiene 3 maneras distintas de analizar componentes
shallow()
Es muy rapido ya que no requiere el renderizado del DOM.
El renderizado es útil para limitarse a probar un componente como
una unidad y para asegurarse de que sus pruebas no afirmen
indirectamente el comportamiento de los componentes secundarios
mount()
PErmite testear eventos( interacciones dentro del componente)
render()
Renderiza la estructura HTML para
Realizaremos estas pruebas Probaremos que
<CounterApp />
haga un correcto match con un
snapshot
Debe de mostrar el valor por defecto de 100
Usando el
wrapper.find
tomando el elemento html donde se muestra el valor del contador
wrapper.find
Encuentra todos los nodos en el árbol de representación del
contenedor actual que coincida con el selector proporcionado.
//Archivo Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import CounterApp from './CounterApp.jsx';
import './index.css';
const divRoot = document.querySelector('#root');
ReactDOM.render(<CounterApp value={10} />, divRoot);
// Archivo CounterApp.jsx
import React, { useState } from 'react';
import PropTypes from 'prop-types';
const CounterApp = ({ value = 10 }) => {
const [counter, setCounter] = useState(value);
// handleAdd
const handleAdd = () => {
setCounter(counter + 1);
};
const handleSubtrac = () => {
setCounter(counter - 1);
};
const handleReset = () => {
setCounter(value);
};
return (
<>
<h1>CounterApp</h1>
<h2> {counter} </h2>
<button onClick={() => handleAdd(1)}> + 1 </button>
<button onClick={handleReset}> Reset </button>
<button onClick={handleSubtrac}> -1 </button>
</>
);
};
CounterApp.propTypes = {
value: PropTypes.number,
};
export default CounterApp;
// Archivo CounterApp.test.js
import React from 'react';
import { shallow } from 'enzyme';
import CounterApp from './CounterApp.jsx';
describe(' Pruebas en el counter app', () => {
test('Deberia de mostrar <CounterApp/> correctamente', () => {
const wrapper = shallow(<CounterApp />);
expect(wrapper).toMatchSnapshot();
});
test('Debe de mostrar el valor por defecto de 100', () => {
const wrapper = shallow(<CounterApp value={100} />);
const counterText = wrapper.find('h2').text().trim();
expect(counterText).toBe('100');
});
});