3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Jestでテストを自動化する

Posted at

Jestとは?

meta(Facebook)製のテスト用のjavascriptフレームワーク。

UIテストを自動化

テストの目的

  • DOMの出力が期待通りであるか
  • コードの変更前後でDOMの出力に差分が発生していないか(スナップショットテスト)

スナップショットテスト

パッケージをインストール

まず、react-test-rendererというパッケージをインストールする。

npm install --dev react-test-renderer
テストファイルを作成

test/example.test.js

test/example.test.js
import React from "react";
import renderer from "react-test-renderer";
import App from "../App";

it("Page snapshot testing", () => {
  const component = renderer.create(<App />);
  expect(component).toMatchSnapshot();
});
テストを実行
npm test

ユニットテスト

ユニットテスト用にLinkコンポーネントを作る。
src/Link.js
import React from "react";

export const Link = (props) => {
  retrun (
    <a
     href="http://reactjs.org"
     target="_brank"
     rel="noopener noreferrer"
    >
      {props.text || "No contents"}
    </a>
  );
};

App.jsも変更

src/App.js
import React from "react";
import logo from "./logo.svg";
import Link from "./Link";
import "./App.css";

export const App = () => {
  retrun (
    <div className="App">
      <header>
        <img src={logo} className="App-logo" alt="logo" />
        <Link text="Learn React" />
      < /header>
    </div>
  );
};
テストコードの作成

Linkコンポーネントがpropsが渡されたときと渡されてない時でUIが変わる。
このパターンが正常に機能するかをテストする。

src/tests/Link.test.jsx
import React from "react";
import { render } from "react-dom";
import { act } from "react-dom/test-utils";
import Link from "./Link";

describe("Link component testing", () => {
  let container = null;
  container = document.createElement("div");
  document.body.appendChild(container);
  
  it("render", () => {
    // テストケース1
    act(() => {
      render(<Link />, container);
    });
    // propsが渡されない場合
    expect(container.textContent).toBe("No contents");

    // テストケース2
    act(() => {
      render(<Link />, container);
    });
    // propsが渡されない場合
    expect(container.textContent).toBe("this link");
  });
})

describe(name, fn)でテストのパッケージ化(ラップ)を行う。
act() Reactのテスト関数。render状態を表現する。

参考

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?