Referência rápida

Folha de dicas do Enzyme para React

Guia rapido de referencia para Enzyme no React: renderizacao shallow vs mount, travessia do DOM, simulacao de eventos e inspecao de estado e propriedades.

· Publicado

Enzyme e uma ferramenta de testes JavaScript para React que simplifica a assercao, manipulacao e navegacao em componentes.

Configuracao com Jest e React 16

// test/setup.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Enzyme.configure({ adapter: new Adapter() });

Modos de renderizacao (Rendering Modes)

Renderizacao rasa (shallow)

Renderiza apenas o componente atual a um nivel de profundidade sem renderizar componentes filhos:

import { shallow } from 'enzyme';

const wrapper = shallow(<MyComponent title="Hello" />);
expect(wrapper.find('h1').text()).toEqual('Hello');

Montagem completa no DOM (mount)

Renderiza o componente junto com todos os filhos em um documento jsdom virtual:

import { mount } from 'enzyme';

const wrapper = mount(<MyComponent />);
expect(wrapper.find('.child-node')).toHaveLength(2);
wrapper.unmount();

Travessia do DOM e seletores (DOM Traversal & Finders)

wrapper.find('button')           // Buscar por seletor CSS ou tipo de componente
wrapper.filter('.active')        // Filtrar selecao atual
wrapper.not('.hidden')           // Filtro inverso
wrapper.children()               // Obter nos filhos
wrapper.parent()                 // Obter elemento pai direto
wrapper.closest('form')          // Encontrar ancestral mais proximo
wrapper.first()                  // Primeiro no correspondente
wrapper.last()                   // Ultimo no correspondente
wrapper.at(0)                    // Enesimo no correspondente

Simulacao de eventos (Simulating Events)

// Evento de clique
wrapper.find('button').simulate('click');

// Evento change com carga simulada
wrapper.find('input').simulate('change', {
  target: { value: 'New text' }
});

// Evento de tecla pressionada
wrapper.find('input').simulate('keydown', { keyCode: 13 });

Estado, Props e Contexto (State, Props & Context)

// Read values
wrapper.state('loading');        // Ler chave de estado
wrapper.prop('disabled');        // Ler valor da prop
wrapper.props();                 // Objeto props completo

// Mutate values in tests
wrapper.setState({ count: 5 });  // Modificar estado em testes
wrapper.setProps({ active: true });

// Access underlying React instance
const instance = wrapper.instance(); // Acessar a instancia interna do React

Assercoes e checagem de elementos (Assertions & Element Checks)

expect(wrapper.exists()).toBe(true);
expect(wrapper.hasClass('btn-primary')).toBe(true);
expect(wrapper.contains(<span className="badge">New</span>)).toBe(true);
expect(wrapper.text()).toContain('Welcome');
expect(wrapper.html()).toContain('class="active"');

Referencias relacionadas

Temas relacionados