アプリの起動時に1回初期化する必要があるモジュールがあるとします(構成を渡すため)。モジュールは次のようになります。
MyModule.js
let isInitiazlied;
const myModule = {
init: function() {
isInitiazlied = true;
},
do: function() {
if (!isInitiazlied)
throw "error"
//DO THINGS
}
}
export default myModule;
Jestを使用して単体テストをしたい。テストファイルは次のようになります。
MyModule.test.js
import myModule from './MyModule'
describe('MyModule', () => {
describe('init', () => {
it('not throws exception when called', () => {
expect(() => myModule.init()).not.toThrow();
});
})
describe('do', () => {
it('throw when not init', () => {
expect(() => myModule.do()).toThrow();
});
})
})
テストを実行すると、モジュールはすでに初期化されているため、2番目のテストは失敗し、例外はスローされません。 beforeEachでjest.resetModules()を使用してみましたが、うまくいきませんでした。
それを解決する方法はありますか(異なるモジュールパターン/テストケース)?
モジュールを再インポートまたは再要求する必要があります。詳細については、ドキュメントまたはこの問題を確認してください:
https://github.com/facebook/jest/issues/3236
https://facebook.github.io/jest/docs/en/jest-object.html#jestresetmodules
describe('MyModule', () => {
beforeEach(() => {
jest.resetModules()
});
describe('init', () => {
const myModule = require('./MyModule');
it('not throws exception when called', () => {
expect(() => myModule.init()).not.toThrow();
});
})
describe('do', () => {
const myModule = require('./MyModule');
it('throw when not init', () => {
expect(() => myModule.do()).toThrow();
});
})
})