豆腐とコンソメ

豆腐とコンソメ

もろもろのプログラム勉強記録

jestで特定のモジュールのみmockにする

こっちでもmockの話を書いた。

www.tohuandkonsome.site

以下のように、1ファイル内に、複数の関数があり、loginのみmockにしたい場合。

firebase.js

export const login = () => {
  // login用の何かしらの処理
};

export const logout = () => {
  // logout用の何かしらの処理
};

以下のようにjest.requireActualを使えばいける。

テストコード

import { login as mockLogin }  from '../../firebase';

// moduleの特定の関数のみmockにしたい
jest.mock('../../firebase', () => ({
  ...jest.requireActual('../../firebase'),
  login: jest.fn() 
}));

test('特定のmoduleのみmockにした',  () => {
  // component等は省略
  fireEvent.click(LoginButton);
  expect(mockLogin).toHaveBeenCalled();
})

テスト対象のコンポーネントが、上記loginlogoutを両方使っていて、片方だけmockにしない状況ってあんまなさそうだけど。

2019/08/07 追記

一部をモックしたいならjest.spyonで対象の関数のみmockの実装をかけばいい。