React 테스트는 스냅 샷이 아닌 스크린 샷입니다.
React 테스트를 작성하고 있습니까?
스냅샷 테스트가 일반적이지만, GitHub의 PullRequest에서는 아무리 차이를 알기 어렵습니다. 만약 스크린샷을 자동적으로 찍어 차분을 이미지 파일로서 비교할 수 있으면 좋겠다고 생각했더니 좋을 것 같은 패키지를 발견했습니다. react-screenshot-test 라는 패키지입니다만, 다음과 같이 차분을 이미지 파일로서 확인할 수 있는 훌륭한 툴입니다.
조속히 시도해 봅시다. 우선 설치에서
$ yarn add -D react-screenshot-test
그런 다음 구성 파일을 만듭니다.
jest.screenshot.config.js
module.exports = {
testEnvironment: "node",
globalSetup: "react-screenshot-test/global-setup",
globalTeardown: "react-screenshot-test/global-teardown",
testMatch: ["**/?(*.)+(screenshot).[jt]s?(x)"],
transform: {
"^.+\\.[t|j]sx?$": "babel-jest", // or ts-jest
"^.+\\.css$": "react-screenshot-test/css-transform",
"^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
"react-screenshot-test/asset-transform"
}
};
babel을 사용하기 때문에 다음 파일도 준비해 둡니다. 덧붙여서 이번에 작성한 샘플 어플리케이션은 create-react-app를 사용하고 있습니다.
babel.config.js
module.exports = {
presets: ["babel-preset-react-app"]
};
스냅샷을 만드는 코드는 이런 식으로 보입니다. 데스크탑과 iPhoneX 각각의 경우에 스크린샷을 찍습니다.
App.screenshot.jsx
import React from "react";
import { ReactScreenshotTest } from "react-screenshot-test";
import "./index.css";
import App from "./App";
ReactScreenshotTest.create("App")
.viewport("Desktop", {
width: 1024,
height: 768
})
.viewport("iPhone X", {
width: 375,
height: 812,
deviceScaleFactor: 3,
isMobile: true,
hasTouch: true,
isLandscape: false
})
.shoot("app", <App />)
.run();
그리고는 다음의 커멘드를 실행해 작성하는 것 같습니다. npm 스크립트에 등록해 둡시다.
$ jest -c jest.screenshot.config.js -u
실행할 때 다음 오류가 발생했습니다. 분명히 필요한 docker 이미지가있는 것 같습니다.
$ yarn test:screenshot
yarn run v1.21.1
$ jest -c jest.screenshot.config.js -u
Error: It looks like you're missing the Docker image required to render screenshots.
Please run the following command:
$ docker pull fwouts/chrome-screenshot:1.0.0
at ensureDockerImagePresent (/Users/daisuke/work/react/screenshot.lesson/node_modules/react-screenshot-test/dist/lib/screenshot-server/DockerizedScreenshotServer.js:50:15)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async DockerizedScreenshotServer.start (/Users/daisuke/work/react/screenshot.lesson/node_modules/react-screenshot-test/dist/lib/screenshot-server/DockerizedScreenshotServer.js:28:9)
at async setUpScreenshotServer (/Users/daisuke/work/react/screenshot.lesson/node_modules/react-screenshot-test/dist/lib/global-setup.js:26:9)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
docker 이미지를 풀고 나서 다시 시도합니다.
$ yarn test:screenshot
yarn run v1.21.1
$ jest -c jest.screenshot.config.js -u
PASS src/App.screenshot.jsx (7.325s)
App
Desktop
✓ app (643ms)
iPhone X
✓ app (680ms)
› 2 snapshots written.
Snapshot Summary
› 2 snapshots written from 1 test suite.
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 2 written, 2 total
Time: 7.384s
Ran all test suites.
✨ Done in 9.85s.
할 수 있었습니다. 제대로 데스크톱과 iPhoneX의 2 종류의 스크린 샷을 얻을 수 있어요.
꽤 깊은 파고들 수 있는 좋은 도구를 찾아 버렸다. 우선은 서둘러 적어둔다.
Reference
이 문제에 관하여(React 테스트는 스냅 샷이 아닌 스크린 샷입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/G-awa/items/de9fa9e18198575e73ca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)