UnitTest with Jest 抛出我错误:无法识别编码:'cesu8' 尝试连接 mysql 数据库

问题描述

我的单元测试有问题。 我正在使用 TypeORM 和 MysqL 和 Jest 进行单元测试。

这是执行'npm run test'时的日志

ReferenceError:在 Jest 环境被拆除后,您正尝试 import 一个文件

   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:398:25)
      at Function.fromPacket (node_modules/MysqL2/lib/packets/handshake.js:62:33)
/home/juan/projects/panel-uifra/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 (/home/juan/projects/panel-uifra/node_modules/MysqL2/node_modules/iconv-lite/lib/index.js:104:23)
    at Object.getDecoder (/home/juan/projects/panel-uifra/node_modules/MysqL2/node_modules/iconv-lite/lib/index.js:125:23)
    at Object.<anonymous>.exports.decode (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/parsers/string.js:10:25)
    at Packet.readNullTerminatedString (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/packets/packet.js:398:25)
    at Function.fromPacket (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/packets/handshake.js:62:33)
    at ClientHandshake.handshakeInit (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/commands/client_handshake.js:93:40)
    at ClientHandshake.execute (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/commands/command.js:39:22)
    at PoolConnection.handlePacket (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/connection.js:425:32)
    at PacketParser.onPacket (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/connection.js:75:12)
    at PacketParser.executeStart (/home/juan/projects/panel-uifra/node_modules/MysqL2/lib/packet_parser.js:75:16)

奇怪的是,这个错误只发生在测试中,当我运行服务器时,连接成功。

我发现的一个解决方案是将编码器显式设置为 iconv-lite,如下所示:

import iconv from 'iconv-lite';
import encodings from 'iconv-lite/encodings';
iconv.encodings = encodings;

但这里的问题是打字稿抓住了我,因为编码道具没有在类型声明中定义:

类型上不存在属性“编码”。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)