---
title: "TypeScript Jest: Cannot use import statement outside module"
description: "SyntaxError: Cannot use import statement outside a module 를 만나버렸습니다."
date: 2023-06-11
tags: [javascript, testing]
sections: [technical]
draft: false
---



## 현상

해시 함수의 유닛테스트를 위해 테스트 코드를 짜고 있던 중, 

![](https://velog.velcdn.com/images/ksr20612/post/92f8d4cd-83be-4e55-ad52-75df8aadda68/image.png)

`SyntaxError: Cannot use import statement outside a module` 를 만나버렸습니다. 😈

## 원인

typescript를 이용하고 있었기 때문에 javascript로 트랜스파일링이 필요함에도, 테스트를 즉시 실행시켜 오류가 발생한 것이었습니다.
추가적으로 import문은 ES6에서 새로 도입된 키워드이기 때문에 jest가 해당 문법을 이해하지 못한 것입니다.


## 해결

- jest가 이해할 수 있도록 javascript commonjs 모듈로 변경이 필요했습니다.
- babel이 먼저 떠올랐으나, next.js 13.4 - swc를 사용하고 있어 babel 설정시 충돌이 날 수 있다고 생각했습니다.
- 그리고 실제로 babel.config.ts를 생성하자 충돌이 발생하여 컴파일을 실패하였습니다.

### 👍 ts-jest 프리셋을 이용하기로 하였습니다.
[👉ts-jest](https://www.npmjs.com/package/ts-jest)

- jest.config.ts 에서 아래와 같이 ts-jest 프리셋을 등록해주었습니다.
 ~~~
 module.exports = {
 preset: 'ts-jest',
 testEnvironment: 'node',
 transform: {
 '^.+\\.ts?$': 'ts-jest',
 },
 transformIgnorePatterns: [' /node_modules/'],
 };
 ~~~

- 성공적으로 돌아갑니다.
	![](https://velog.velcdn.com/images/ksr20612/post/771bcf12-ecea-4920-9ac5-ef175f0746d8/image.png)
