Szybka pomoc

Ściągawka z Enzyme dla Reacta

Szybki przewodnik po Enzyme w React: renderowanie shallow vs mount, trawersowanie DOM, symulacja zdarzeń oraz inspekcja state i props.

· Opublikowano

Enzyme to narzędzie testowe JavaScript dla Reacta, ułatwiające sprawdzanie, manipulowanie i przechodzenie przez komponenty.

Konfiguracja z Jest i React 16

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

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

Tryby renderowania (Rendering Modes)

Płytkie renderowanie (shallow)

Renderuje tylko bieżący komponent na głębokość jednego poziomu bez komponentów podrzędnych:

import { shallow } from 'enzyme';

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

Pełne montowanie w DOM (mount)

Renderuje komponent wraz ze wszystkimi dziećmi w wirtualnym dokumencie jsdom:

import { mount } from 'enzyme';

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

Przechodzenie przez DOM i selektory (DOM Traversal & Finders)

wrapper.find('button')           // Wyszukiwanie selektorem CSS lub typem komponentu
wrapper.filter('.active')        // Filtrowanie biezacej selekcji
wrapper.not('.hidden')           // Odwrotne filtrowanie
wrapper.children()               // Pobieranie wezlow potomnych
wrapper.parent()                 // Pobieranie bezposredniego rodzica
wrapper.closest('form')          // Wyszukiwanie najblizszego przodka
wrapper.first()                  // Pierwszy pasujacy wezel
wrapper.last()                   // Ostatni pasujacy wezel
wrapper.at(0)                    // N-ty pasujacy wezel

Symulacja zdarzeń (Simulating Events)

// Zdarzenie klikniecia
wrapper.find('button').simulate('click');

// Zdarzenie change z atrapa danych
wrapper.find('input').simulate('change', {
  target: { value: 'New text' }
});

// Zdarzenie nacisniecia klawisza
wrapper.find('input').simulate('keydown', { keyCode: 13 });

Stan, Props i Kontekst (State, Props & Context)

// Read values
wrapper.state('loading');        // Odczyt klucza stanu
wrapper.prop('disabled');        // Odczyt wartosci prop
wrapper.props();                 // Pelny obiekt props

// Mutate values in tests
wrapper.setState({ count: 5 });  // Aktualizacja stanu w testach
wrapper.setProps({ active: true });

// Access underlying React instance
const instance = wrapper.instance(); // Dostep do wewnetrznej instancji Reacta

Asercje i weryfikacja elementów (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"');

Powiązane materiały

Powiązane tematy