作成日: 2023/04/22
0

Jestの便利な小ネタ

JestはJavaScriptのテストランナーであり、Facebookが開発したオープンソースのテストフレームワークです。Jestは、標準のテストフレームワークよりも多くの機能を提供し、高速な実行速度と良好なデバッグ機能を備えています。この記事では、Jestの便利な小ネタをいくつか紹介します。

1. スナップショットテスト

スナップショットテストは、Jestの主な機能の1つです。これは、コンポーネントやUIコードの変化を追跡するために使用されます。スナップショットテストは、テスト実行時にUIのコードをスクリーンショットとして保存して、次回実行時に保存されたスクリーンショットと比較することにより、変化があるかどうかを確認します。以下はスナップショットテストの実装の例です。

import React from 'react';
import renderer from 'react-test-renderer';
import Button from '../Button';

test('Button matches snapshot', () => {
  const component = renderer.create(<Button />);
  let tree = component.toJSON();
  expect(tree).toMatchSnapshot();
});

上記の例では、Buttonコンポーネントをレンダリングして、スナップショットを作成しています。次回テストを実行した際に、コンポーネントの変更がある場合は、テストが失敗します。

2. Mock関数

Jestには、Mock関数を使用できる機能があります。これは、クラスやモジュールの代替品として機能する関数です。Mock関数は、関数が実際に実行されているかどうか、引数が正しいかどうか、戻り値が適切かどうかなどを確認するために使用できます。以下はMock関数の例です。

const mockFn = jest.fn();
mockFn(1);
mockFn('Hello World');
console.log(mockFn.mock.calls); // [[1], ['Hello World']]

上記の例では、jest.fn()を使用してMock関数を作成しています。その後、引数を渡してMock関数を実行しています。最後に、mockFn.mock.callsをログに表示して、引数が適切に渡されていることを確認しています。

3. describeブロック

Jestでは、describeブロックとitブロックを使用して、関連するテストをグループ化できます。describeブロックは、グループのタイトルを指定し、itブロックは各テストを記述します。以下はdescribeブロックの例です。

describe('Math operations', () => {
  it('Adds two numbers correctly', () => {
    expect(1 + 1).toBe(2);
  });
  it('Subtracts two numbers correctly', () => {
    expect(2 - 1).toBe(1);
  });
});

上記の例では、Math operationsというグループを定義し、Adds two numbers correctlySubtracts two numbers correctlyという2つのテストを定義しています。

4. Async/Await

Jestは、非同期コードのテストにも使用できます。非同期関数をテストする場合、asyncキーワードとawaitキーワードを使用することができます。以下は非同期コードをテストする例です。

async function fetchData() {
  const data = await axios.get('https://api.example.com/data');
  return data;
}

test('fetchData returns data', async () => {
  const data = await fetchData();
  expect(data).toBeDefined();
});

上記の例では、非同期関数fetchData()が定義されています。次に、fetchData()関数が適切に実行され、データが返されるかどうかを確認するために、テストを定義しています。

5. モジュールモック

Jestでは、モジュールの代替品としてモックを使用できます。これは、依存関係を持つモジュールをテストする際に役立ちます。モックは、モジュールのインポートを置き換え、テスト中に期待される動作をシミュレートできます。以下はモジュールモックの例です。

jest.mock('../userService', () => {
  return () => ({
    getUser: () => Promise.resolve({ name: 'John Doe' })
  });
});

test('getUser returns user data', async () => {
  const userService = require('../userService');
  const user = await userService.getUser();
  expect(user.name).toBe('John Doe');
});

上記の例では、../userServiceモジュールをモック化し、getUser()メソッドが適切に実行され、適切な値が返されることを確認しています。

以上が、Jestの便利な小ネタのいくつかです。これらの小ネタを利用して、Jestをより効果的に活用してください。

参考資料


フルスタックエンジニア。徒然なるままに記事を投稿していきます。日々学習。