[Jest]] Jest

1. Jest?

1.0 Enzyme?, Jest?, React Testing Library?

1.1 설치

$ yarn add enzyme enzyme-adapter-react-16
# 또는 npm install --save enzyme enzyme-adapter-react-16

1.2 핵심 기능 (Core features)

** 라이프사이클 훅 호출 여부는 mount API와 shallow API가 상이하므로 유의가 필요하다. 간단하게 정리하면 mount API는 모든 라이프사이클 훅이 호출되고 shallow API는 componentDidMountcomponentDidUpdate를 제외하고 라이프사이클 훅이 호출된다. 이러한 차이점에 유의하여 선별적으로 API를 사용하도록 하자.

1.3 사용 예시

export default class Counter extends Component { state = { value: 0, title: ‘’, }

changeTitle = (e) => { this.setState(() => ({ title: e.target.value })); }

increment = () => { this.setState(prevState => ({ value: prevState.value + 1 })); };

render() { return ( <div> <input value={this.state.title} id=”title” onChange={this.changeTitle} /> {this.state.value} <button id=”up” onClick={this.increment}>증가</button> </div> ); } }


* counter-test.jsx
```javascript
import React from 'react';
import Counter from './counter.jsx';
import { shallow, configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });

describe('<Counter />', () => {
  it('성공적으로 렌더링되어야 합니다.', () => {
    const wrapper = shallow(<Counter />);
    expect(wrapper.length).toBe(1);
  });

  it('타이틀 인풋이 렌더링되어야 합니다.', () => {
    const wrapper = shallow(<Counter />);
    expect(wrapper.find('#title').length).toEqual(1);
  });

  it('타이틀이 변경되어야 합니다.', () => {
    const wrapper = shallow(<Counter />);
    wrapper.find('#title').simulate('change', { target: { value: '값' } });
    expect(wrapper.state().title).toBe('값');
  });

  it('숫자가 올라가야 합니다.', () => {
    const wrapper = shallow(<Counter />);
    wrapper.find('#up').simulate('click');
    wrapper.find('#up').simulate('click');
    expect(wrapper.state().value).toBeLessThan(1);
  });
});

2.2 목 함수(Mock Functions)

○ 참고 영상

○ 참조 문서 및 사이트