アプリケーションのユニットテストケースを作成しています。 Utilsセクションに記述され、すべてのファイルで使用される関数が1つあります。必要なときにこのUtils関数をモックしたかったのですが、できません。
コードのセットアップは次のとおりです。
Utils.js
> const getData = (name) => "Hello !!! " + name;
>
> const getContact = ()=> return Contacts.mobile;
>
> export {
> getData,
> getContact }
Login.js(Utils.jsを使用)
const welcomeMessage = (name) => {
return getData(name);
}
私のテストファイル(Login.spec.js)
import { getData } from '../../src/utils';
jest.mock('getData', () => jest.fn())
describe('User actions', () => {
it('should get username', () => {
const value = 'Hello !!! Jest';
expect(welcomeMessage('Jest')).toEqual(value);
});
});
テストケースを実行すると、次のエラーが表示されます。
Cannot find module 'getData' from 'Login.spec.js'
公式のJestドキュメンテーションとSOでも解決策を見つけようとしましたが、何も見つかりませんでした。このエラーを修正してこの関数をモックすることはできません。
jest.mock(...)
の最初の引数はモジュールパスでなければなりません:
_jest.mock('../../src/utils');
_
utils
モジュールはコードであり、3番目のライブラリではないため、jestの手動モックを学ぶ必要があります。 https://facebook.github.io/jest/docs/en/manual-mocks .html
このファイルがある場合:_src/utils.js
_
ファイルを作成することでそれをモックできます:_src/__mocks__/utils.js
_
このファイルの内容はオリジナルの複製ですが、実装をgetData = jest.fn()
で置き換えます
ファイルをテストするには、ファイルの先頭でjest.mock('../../src/utils');
を呼び出すだけです。
慣れてきたら、その関数をbeforeEach()
内で呼び出し、そのカウンターjest.unmock('../../src/utils');
insider afterEach()
を呼び出すことができます
それについて考える簡単な方法は、次のとおりです。
jest.mock('../../src/utils');
を呼び出すとき、それはjest
に次のことを伝えることを意味します。
実行中のテストが
require('../../src/utils')
の行に一致する場合は、ロードしないで、_../../src/__mocks__/utils
_をロードしてください。
別のソリューションは、次のようなことを行うことでこれを偽造します。
window['getData'] = jest.fn();