[Jest Error] ReferenceError: You are trying to `import` a file after the Jest environment has been torn down.

·2023년 4월 13일
0

nestjs

목록 보기
2/10

nestjs 프로젝트를 하다가 repository.spec.ts에 unit test를 하나 추가했는데 아래와 같은 에러가 계속 떴다.

ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From apps/customer/src/v1/order/repositories/order.repository.spec.ts.

      at Object.getCodec (node_modules/mysql2/node_modules/iconv-lite/lib/index.js:63:27)
      at Object.getDecoder (node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23)
      at Object.<anonymous>.exports.decode (node_modules/mysql2/lib/parsers/string.js:10:25)
      at Packet.readNullTerminatedString (node_modules/mysql2/lib/packets/packet.js:412:25)
      at Function.fromPacket (node_modules/mysql2/lib/packets/handshake.js:62:33)
/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:104
                throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')");
                ^

Error: Encoding not recognized: 'cesu8' (searched as: 'cesu8')
    at Object.getCodec (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:104:23)
    at Object.getDecoder (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23)
    at Object.<anonymous>.exports.decode (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/parsers/string.js:10:25)
    at Packet.readNullTerminatedString (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/packets/packet.js:412:25)
    at Function.fromPacket (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/packets/handshake.js:62:33)
    at ClientHandshake.handshakeInit (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/commands/client_handshake.js:112:40)
    at ClientHandshake.execute (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/commands/command.js:45:22)
    at Connection.handlePacket (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/connection.js:489:32)
    at PacketParser.onPacket (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/connection.js:94:12)
    at PacketParser.executeStart (/Users/gimjinhoe/work/tf-o-backend/node_modules/mysql2/lib/packet_parser.js:75:16)

Node.js v19.6.1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
  it('should be throw error', () => {
    try {
      const createOrderDto = new CreateOrderDto();
      createOrderDto.member_id = testCreateOrderDto.member_id;
      createOrderDto.orderer_email = testCreateOrderDto.orderer_email;
      createOrderDto.orderer_call = testCreateOrderDto.orderer_call;
      createOrderDto.orderer_name = testCreateOrderDto.orderer_name;
      createOrderDto.receiver_call = testCreateOrderDto.receiver_call;
      createOrderDto.receiver_addr = testCreateOrderDto.receiver_addr;

      const order = createOrderDto.toOrderEntity();
      orderRepository.create(order);
    } catch (error) {
      console.log(error);
      expect(error).toBeDefined();
    }
  });

에러메시지를 해석해보면 Jest 환경이 파괴(?)되고 난 뒤에 파일 Import를 시도하고 있다는 얘기였는데, 무슨 소리인지 이해를 못하다가, 아, 비동기 처리하는데 응답이 나중에 돌아왔나보구나 하고 깨달았다. 기존에 php를 주력 언어로 쓰면서 비동기로 동작하는 코드를 작성해본 적이 거의 없다보니 이제 익숙해지는 중이다.
아래처럼 고치니 더이상 에러가 뜨지 않았다.

  it('should be throw error', async () => {
    try {
      const createOrderDto = new CreateOrderDto();
      createOrderDto.member_id = testCreateOrderDto.member_id;
      createOrderDto.orderer_email = testCreateOrderDto.orderer_email;
      createOrderDto.orderer_call = testCreateOrderDto.orderer_call;
      createOrderDto.orderer_name = testCreateOrderDto.orderer_name;
      createOrderDto.receiver_call = testCreateOrderDto.receiver_call;
      createOrderDto.receiver_addr = testCreateOrderDto.receiver_addr;

      const order = createOrderDto.toOrderEntity();
      await orderRepository.create(order);
    } catch (error) {
      console.log(error);
      expect(error).toBeDefined();
    }
  });
profile
백엔드 개발자. 공동의 목표를 함께 이해한 상태에서 솔직하게 소통하며 일하는 게 가장 즐겁고 효율적이라고 믿는 사람.

0개의 댓글