Cristian Iñiguez
Alfredo Martínez García
Wladimir Rocha
Seba Cardoso
Manuel Rivera
Willy David Da Conceicao Lozada
Martín David Roldán
Sandra Menendez Alonso
Paolo Carrion
Andrés Felipe Eslava Zuluaga
Jean Nuñez
Oscar Barajas Tavares
Carlos López
Miguel de la Rosa
Cristian Antonio García González
Miguel de la Rosa
freddy Mejia
Daniel Esteban Santos Mendez
Federico Marroquín Baquero
Samuel Miranda Martínez
Paolo Carrion
Lorena Franco
Andrés Felipe Eslava Zuluaga
Nikolas Santis
Jose Alberto Carballo Rojas
Jose Alberto Carballo Rojas
Elioenai Garcia
Ángel David Vargas Hernández
Marina Urbano
GARIBAY CADENAS VICTOR ALFREDO
Mitchell Sierralta Valdivia
Eder
Luis Lira
Ronald Vyhmeister
Maria Fernanda Monagas Vegas
Para los que ven este curso cuando ya existe react 17 pero el proyecto tiene react 16
npm i react-test-renderer@16.14.0 -D
héroe sin capa!
Hermano usted acaba de salvar la vida de más de uno
Es una práctica común agregar a package.json en scripts esta línea: "test:update": "jest --updateSnapshot", Entonces solo escribir el comando
npm test:update
Me parece también que es mucjo mejor agregar esos scripts a nuestro package :D
Si justo pense lo mismo... gracias por su aporte :)
Existen otras formas de actualizar los snapshots.
// Actualiza todos los snapshots // #1 jest --updateSnapshot // #2 jest -u // Actualiza solo el snapshot que quieres // #3 jest -u -t='<NOMBRE_DEL_TEST>' // #4 jest -u <NOMBRE_DEL_TEST>
De la documentacion oficial de jest:
Snapshot Testing
/ El SnapShot Testing es un tipo de prueba que consiste en asegurarse de que dos elementos de una aplicación son los mismos y no han cambiado, por motivo de que Jest es una herramienta que como es habitual se utiliza para react, la mayoría de las veces estaremos utilizando este tipo de pruebas para probar un componente de react, es decir, nos aseguraremos de que un determinado componente de react que dependiendo del caso, no debe cambiar o no debe cambiar, y en el caso de haber cambiado o no ser el mismo que era, Jest lanzará un error. / Para realizar el snapshot testing, primero debemos tener un proyecto react e identificar el componente react que se va a testear, a continuación debemos instalar npm i react-test-renderer, que es un paquete para convertir componentes react en strings, luego debemos importar este paquete dentro del archivo donde estamos creando el snapshot test para el componente react, una vez hecho esto, tenemos que crear nuestro snapshot test, y dentro de este, tenemos que añadir una variable que tenga como valor la importación al paquete instalado, esa importación es una instancia de una clase, por lo tanto, esta tiene métodos, asn debemos usar dos de esos método, el primero es el método . create(), este método tiene que recibir como parámetro el componente react que vamos a probar, y el segundo es el método .toJSON(), el cual convertirá el componente react en una cadena de caracteres, a partir de ahí, el paquete creará una nueva carpeta en la que dependiendo de la cantidad de componentes react que requiramos probar, esta añadirá un archivo o muchos archivos que van a tener la extensión .snap y donde están todos los componentes react convertidos en cadenas de caracteres. / Ejemplo: /
import React from 'react'; import renderer from 'react-test-renderer'; import Link from '../Link.react'; it('renders correctly', () => { const tree = renderer .create(<Link page="link de facebook">Facebook</Link>) .toJSON(); expect(tree).toMatchSnapshot(); }); The code of the .snap file generated by the package exports[`renders correctly 1`] = ` <a className="normal" href="link de facebook" onMouseEnter={[Function]} onMouseLeave={[Function]} > Facebook </a> `;
/
it('will check the matchers and pass', () => { const user = { createdAt: new Date(), id: Math.floor(Math.random() * 20), name: 'LeBron James', }; expect(user).toMatchSnapshot({ createdAt: expect.any(Date), id: expect.any(Number), }); });
/
it('renders correctly', () => { const tree = renderer .create(<Link page="link de ejemplo">Example Site</Link>) .toJSON(); expect(tree).toMatchInlineSnapshot(` <a className="normal" href="link de ejemplo" onMouseEnter={[Function]} onMouseLeave={[Function]} > Example Site </a> `); });
/
Lovely
Para usar snapshot debemos covertir un componente a un Object Json
Exacto, y esto nos permite darle seguimiento a componentes o estructuras de datos.
La documentación menciona que si se require actualizar un snapshot especifico o un grupo de snapshots se puede utilizar un parametro adicional, en mi caso solo actualize Footer
jest --updateSnapshot --testNamePattern=Footer
Alguien sabe porque me sale este error?
Minified React error #152; visit https://reactjs.org/docs/error-decoder.html?invariant=152&args[]=ProviderMock for the full message or use the non-minified dev environment for full errors and additional helpful warnings. 16 | test('Comprobar boton comprar', () => { 17 | const handleAddToCart = jest.fn(); > 18 | const wrapper = mount( | ^ 19 | <ProviderMock> 20 | <Product product={ProductMock} handleAddToCart={handleAddToCart} /> 21 | </ProviderMock>,
Hola @migueeldrg.
Podrías compartir tu código para poder intentar ayudarte en encontrar el error.
Saludos.
Basicamente en todas las partes donde dice mount me sale
import React from 'react'; import { mount, shallow } from 'enzyme'; import ProviderMock from '../../__mocks__/ProviderMock'; import Product from '../../components/Product'; import ProductMock from '../../__mocks__/ProductMock'; describe('<Product/>', () => { test('Render del componente Product', () => { const product = shallow( <ProviderMock> <Product /> </ProviderMock>, ); //esto es para saber si se renderizo el componente expect(product.length).toEqual(1); }); test('Comprobar boton comprar', () => { const handleAddToCart = jest.fn(); const wrapper = mount( <ProviderMock> <Product product={ProductMock} handleAddToCart={handleAddToCart} /> </ProviderMock>, ); //Para encontrar un button y simular un click dentro del wrapper wrapper.find('button').simulate('click'); //Para comprobar cuantas veces se ejecuto la funcion expect(handleAddToCart).toHaveBeenCalledTimes(1); }); });
import React from 'react'; import { mount } from 'enzyme'; import Footer from '../../components/Footer'; import renderer from 'react-test-renderer'; describe('<Footer />', () => { const footer = mount(<Footer />); test('Render del componente Footer', () => { expect(footer.length).toEqual(1); }); test('Render del titulo', () => { expect(footer.find('.Footer-title').text()).toEqual('Platzi Store'); }); }); describe('footer snapshot', () => { test('Comprobar la UI del componente Footer', () => { const footer = renderer.create(<Footer />).toJSON(); expect(footer).toMatchSnapshot(); }); });
Qué hace exactamente la función create del paquete 'react-test-renderer';
Porfa, no digas 'la UI' suena horrible. by the way. buen video
Federico, entonces se debe de decir "interfaz de usuario"? o "the UI"? (Pd: esto me recuerda a "el journey del cliente")
literal el profe hablo spanglish toda la clase XD
npm i react-test-renderer@16.12.0 --save-dev
Graaaacias
Hola, en la última versión, se genera un problema con el watch, correspondiente a: TypeError: fsevents is not a function
Para corregirlo, se puede agregar una configuración en el package.json del jest:
"watchPathIgnorePatterns": ["node_modules"]
resuelto react-test-renderer@16.12.0
no me deja instalar la depenencia de react-test-renderer
¿Cuándo usar los Snapshot? Normalmente estos test son necesarios cuando nuestra Ul no cambia y que en dado caso por algún detalle ha cambiado, nos vamos a dar cuenta que hay ese detalle en el cambio.
Si les aparece que el comando "jest --updateSnapshot" no ha sido encontrado, escriban npm test -- --updateSnapshot y se arregla el problema.
A mi me ha funcionado con:
npm test -- --updateSnapshot
con yarn test -u me funciona
Si les sale un error tipo "TypeError: Cannot read property 'isBatchingLegacy' of undefined" probablemente se solucione instalando la misma mayor version de react-test-renderer igualandola a la mayor version de react que tengan en mi caso para React 16..12.0 :
npm install react-test-renderer@16 --save-dev
tal vez estoy equivocado pero creo que enzyme ya trae el generador de snapshots incluido, por qué necesitamos React test renderer? o es que acaso es mejor?
No sé si sea mejor o pero, pero React test renderer es el que se menciona en la documentación oficial para hacer las pruebas de renderizado :)
Es cierto, a mi me funciona algo como:
const wrapper = shallow(<MiComponente />); expect(wrapper).toMatchSnapshot();
Puedes hacerlo de ambas formas.
Alguien mas le dan estos errores?
![](