【jest】基礎 RSpecと比較 モック関数について


はじめに

jestを学習し始めたので、簡単にまとめる。
主に公式ドキュメントの序盤のみになります。
https://jestjs.io/en/

jest

test('1+1は2', () => {
  expect(1+1).toBe(2);     
});

RSpec

RSpec.describe '足し算' do
  it '1+1は2' do
    expect(1 + 1).to eq 2
  end
end

jestでモック関数を作成


function forEach(items, callback) {
  for (let index = 0; index < items.length; index++) {
    callback(items[index]);
  }
}

↑こういった、配列とコールバックを引数に受け取る関数を定義して、

const mockCallback = jest.fn(x => 42 + x);
forEach([0, 1], mockCallback);

受け取った数値に42を足すモック関数をjest.fnで定義。
mockCallbackに代入。
これで、jestが用意するメタ情報を持っているダミーの関数ができる。

ここから、テストを作成し、コールバックに適切にパラメータが渡っているか、実行結果が返せているかを検証する。

//mockCallbackが呼ばれる回数は2回
expect(mockCallback.mock.calls.length).toBe(2);

//1回目にモック関数が呼ばれたときの引数の1番目は’0’
expect(mockCallback.mock.calls[0][0]).toBe(0);

//2回目にモック関数が呼ばれたときの引数の1番目は’1’
expect(mockCallback.mock.calls[1][0]).toBe(1);

//1回目にモック関数が呼ばれたときのリターンは’42’
expect(mockCallback.mock.results[0].value).toBe(42);

ここまでがドキュメントに載っているものです。
更に、例えば

//2回目にモック関数が呼ばれたときのリターンは’43’
expect(mockCallback.mock.results[1].value).toBe(43);

こちらのテストもパスすることになる。

終わりに。

最後まで読んで頂きありがとうございます
転職の為、未経験の状態からReact,Rails等を学習しております。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。