コンポーネントテストファイルにこのようなモックモジュールがあります
jest.mock('../../../magic/index', () => ({
navigationEnabled: () => true,
guidanceEnabled: () => true
}));
これらの関数は、コンポーネントのレンダリング関数で呼び出され、特定の機能を非表示および表示します。
これらのモック関数の戻り値のさまざまな組み合わせのスナップショットを撮りたいです。
私はこのようなテストケースを持っているとします
it('RowListItem should not render navigation and guidance options', () => {
const wrapper = shallow(
<RowListItem type="regularList" {...props} />
);
expect(enzymeToJson(wrapper)).toMatchSnapshot();
});
このテストケースを実行するには、モックモジュール関数の戻り値をfalse
に動的に変更します
jest.mock('../../../magic/index', () => ({
navigationEnabled: () => false,
guidanceEnabled: () => false
}));
RowListItem
コンポーネントを既に1回インポートしているため、モックモジュールは再びインポートしません。変わらないどうすればこれを解決できますか?
モジュールをモックして、スパイを返し、テストにインポートできます。
import {navigationEnabled, guidanceEnabled} from '../../../magic/index'
jest.mock('../../../magic/index', () => ({
navigationEnabled: jest.fn(),
guidanceEnabled: jest.fn()
}));
その後、mockImplementation
を使用して実際の実装を変更できます
navigationEnabled.mockImplementation(()=> true)
//or
navigationEnabled.mockReturnValueOnce(true);
そして次のテストで
navigationEnabled.mockImplementation(()=> false)
//or
navigationEnabled.mockReturnValueOnce(false);
あなたがやりたいことは
import { navigationEnabled, guidanceEnabled } from '../../../magic/index';
jest.mock('../../../magic/index', () => ({
navigationEnabled: jest.fn(),
guidanceEnabled: jest.fn()
}));
describe('test suite', () => {
it('every test', () => {
navigationEnabled.mockReturnValueOnce(value);
guidanceEnabled.mockReturnValueOnce(value);
});
});
これらの関数の詳細については、こちらをご覧ください=> https://facebook.github.io/jest/docs/mock-functions.html#mock-return-values
受け入れられた答えを得るのに苦労しました-navigationEnabled
とguidanceEnabled
に相当するものは、それらに対してmockReturnValueOnce
を呼び出そうとしたときに未定義でした。
ここに私がしなければならなかったことがあります:
../../../magic/__mocks__/index.js
::
export const navigationEnabled = jest.fn();
export const guidanceEnabled = jest.fn();
index.test.js
ファイル内:
jest.mock('../../../magic/index');
import { navigationEnabled, guidanceEnabled } from '../../../magic/index';
import { functionThatReturnsValueOfNavigationEnabled } from 'moduleToTest';
it('is able to mock', () => {
navigationEnabled.mockReturnValueOnce(true);
guidanceEnabled.mockReturnValueOnce(true);
expect(functionThatReturnsValueOfNavigationEnabled()).toBe(true);
});