Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testing de componentes React con Enzyme

Testing de componentes React con Enzyme

Veremos porqué es bueno realizar testing de nuestros componentes React: a qué nos ayuda y cómo realizar los tests con Enzyme, Chai y Mocha.

Elio

May 18, 2017
Tweet

More Decks by Elio

Other Decks in Programming

Transcript

  1. $ whoami const elioRivero = { work: Automattic: { team:

    jetpack, position: ‘Code Wrangler’ }, }, blog: ‘elio.blog’, twitter: ‘@eliorivero’ };
  2. CALYPSO ✦ Open Source
 github.com/Automattic/wp-calypso ✦ Implementado con React y

    Flux Redux
 github.com/Automattic/wp-calypso/tree/master/docs/our- approach-to-data.md ✦ REST API propia de WordPress.com
 developer.wordpress.com/docs/api/
  3. JETPACK ✦ Open Source
 github.com/Automattic/jetpack ✦ UI de ajustes implementada

    con React y Redux
 github.com/Automattic/jetpack/tree/master/_inc/client ✦ REST API del core de WordPress
 github.com/WP-API/WP-API
  4. Verifica lo que hace el código Previene cambios futuros destructivos

    Acelera desarrollo de características complejas de probar continuamente Autodocumenta comportamiento
  5. Mocha para bailar los tests
 mochajs.org Chai para aserciones
 chaijs.com

    Sinon para espiar acciones
 sinonjs.org Enzyme para interpretar
 airbnb.io/enzyme/ Next.js como framework github.com/zeit/next.js
  6. ✦ útil para probar un componente desafectado por sus hijos.

    ✦ Incluye fases componentWill* shallow() API PRINCIPAL
  7. ✦ útil para probar el ciclo de vida completo de

    un componente. ✦ Incluye fases componentDid* mount() API PRINCIPAL
  8. ✦ produce árbol de la estructura HTML resultante ✦ no

    es un objeto Enzyme o React sino Cheerio
 cheerio.js.org render() API PRINCIPAL
  9. SHALLOW DE UN COMPONENTE import React from 'react'; import {

    Masthead } from '../index'; import { shallow } from 'enzyme'; import { expect } from 'chai'; describe( 'Masthead', () => { it( ‘should display badge when in Dev Mode', () => { const comp = shallow( <Masthead connectionStatus="dev"/> ); expect( comp.find( 'code' ) ).to.have.length( 1 ); } ); } );
  10. SHALLOW DE UN COMPONENTE import React from 'react'; import {

    Navigation } from '../index'; import { shallow } from 'enzyme'; import { expect } from 'chai'; let testProps = { userCanManageModules: false, userCanViewStats: false, isModuleActivated: module => false }; const wrapper = shallow( <Navigation { ...testProps } /> ); it( 'should render 1 tab: Apps', () => { expect( wrapper.find( 'NavItem' ).children() .text() ) .to.be.equal( 'Apps' ); } );
  11. SHALLOW DE UN COMPONENTE import React from 'react'; import {

    Navigation } from '../index'; import { shallow } from 'enzyme'; import { expect } from 'chai'; let testProps = { userCanManageModules: true, userCanViewStats: false, isModuleActivated: module => false }; const wrapper = shallow( <Navigation { ...testProps } /> ); it( 'should render 3 tabs: At a Glance, Apps, Plans', () => { expect( wrapper.find( 'NavItem' ).children() .map( item => item.text() ).join() ) .to.be.equal( 'At a Glance,Apps,Plans' ); } );
  12. SHALLOW DE UN COMPONENTE import React from 'react'; import {

    Masthead } from '../index'; import { shallow } from 'enzyme'; import { expect } from 'chai'; describe( 'Masthead', () => { it( ‘should display badge when in Dev Mode', () => { const comp = shallow( <Masthead connectionStatus="dev"/> ); expect( comp.find( 'code' ) ).to.have.length( 1 ); } ); } ); components/masthead export default connect( state => { return { connectionStatus: getSiteConnectionStatus( state ), // más props }; } )( Masthead );