Jest
를 사용해서 비동기 로직 테스트 중 async/await
구문을 사용하자 아래와 같은 에러를 보게 되었다.
// test-util.spec.js
describe('test util test', () => {
test('test a', async () => {
await import('./test-util').then(m => expect(m.default.a()).toBe('a'));
});
});
원인은 import
,export
구문 사용을 위해 아래와 같이 babel-jest
의 transform
을 설정했는데, 바벨이 async/await
코드를 generator
기반으로 바꾸는데, 이 때 자바스크립트 타겟 레벨이 es6
미만이 되면 generator
를 regeneratorRuntime
모듈을 사용해서 구현한다.
이 regeneratorRuntime
가 없어서 발생한 에러다.
// jest.config.js
module.exports = {
...
transform: {
'^.+\\.js$': 'babel-jest',
'^.+\\.mjs$': 'babel-jest'
}
};
해결 방법은 예전엔 babel-polyfill
을 추가하는 것이었는데, babel-polyfill
은 deprecated 되었고, regeneratorRuntime
를 사용하면 된다고 한다.
npm i --save-dev regenerator-runtime
import 'regenerator-runtime';
describe('test util test', () => {
test('test a', async () => {
await import('./test-util').then(m => expect(m.default.a()).toBe('a'));
});
});