react 공식 홈페이지 참고
공식 홈페이지를 참고하여 각자의 CRA 프로젝트를 만듭니다.
yarn create react-app ${APPNAME}
jest 공식 홈페이지 참고
yarn add --dev jest babel-jest @babel/preset-env @babel/preset-react react-test-renderer
module.exports = {
presets: [
"@babel/preset-env", ["@babel/preset-react", {"runtime": "automatic"}]
]
}
먼저 테스트 전에 자동으로 추가 되어있는 App.test.js를 삭제한다.
두 번째로 package.json 내 scripts 중 test를 변경한다. (꼭 하지 않아도 된다.)
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "yarn jest", << 이 부분 변경
"eject": "react-scripts eject"
},
테스트할 데이터는 공식 홈페이지에 있는 코드로 진행한다.
// src/Link.js
import {useState} from 'react';
const STATUS = {
HOVERED: 'hovered',
NORMAL: 'normal',
};
export default function Link({page, children}) {
const [status, setStatus] = useState(STATUS.NORMAL);
const onMouseEnter = () => {
setStatus(STATUS.HOVERED);
};
const onMouseLeave = () => {
setStatus(STATUS.NORMAL);
};
return (
<a
className={status}
href={page || '#'}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
>
{children}
</a>
);
}
// src/Link.test.js
import React from 'react';
import renderer from 'react-test-renderer';
import Link from './Link';
it('changes the class when hovered', () => {
const component = renderer.create(
<Link page="http://www.facebook.com">Facebook</Link>,
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
// manually trigger the callback
renderer.act(() => {
tree.props.onMouseEnter();
});
// re-rendering
tree = component.toJSON();
expect(tree).toMatchSnapshot();
// manually trigger the callback
renderer.act(() => {
tree.props.onMouseLeave();
});
// re-rendering
tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
위와같이 js파일을 추가해준 뒤
yarn test
혹은
yarn jest
명령어를 실행 해 테스트를 진행한다.
참고 글
https://velog.io/@sooyun9600/React-is-not-defined-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0