You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest测试环境下web3js调用signTransaction报'Expected message to be an Uint8Array'错误的求助

解决Jest测试中web3 signTransaction报错"Expected message to be an Uint8Array"的问题

我之前也碰到过一模一样的问题,这种情况基本都是Node.js测试环境和浏览器环境的API兼容差异,或是web3.js版本对参数处理的细微区别导致的,下面给你几个可以尝试的解决方案:

1. 手动转换私钥为Uint8Array格式

Jest环境下,直接传入字符串格式的私钥(哪怕带0x前缀),有时候会导致web3内部转Uint8Array时出错。你可以手动把私钥转换成Buffer(Uint8Array的子类)再传入:

// 移除私钥的0x前缀,再转成Buffer格式
const privateKeyBuffer = Buffer.from(constants.TEST_WALLET_PRIVATE_KEY.replace('0x', ''), 'hex');
// 用转换后的私钥签名
return await web3.eth.accounts.signTransaction(tx, privateKeyBuffer);

2. 给交易对象添加明确的chainId

Kovan测试网的chainId是42,web3的signTransaction在部分版本里需要明确指定chainId才能正确生成签名消息,否则内部处理时容易出现格式异常:

const tx = {
  from,
  to: constants.AAVE_V2_KOVAN_LENDING_POOL,
  gas: web3.utils.toHex(279600),
  data,
  chainId: 42 // 添加上Kovan的chainId
};

3. 为Jest环境添加polyfill兼容

如果你的web3.js是v4.x版本,它对Node.js环境的依赖和v1.x有差异,需要补充polyfill来兼容Uint8Array/Buffer的处理:

  • 先安装依赖包:
npm install --save-dev buffer @babel/polyfill
  • 新建jest.setup.js文件,添加以下内容:
import '@babel/polyfill';
global.Buffer = global.Buffer || require('buffer').Buffer;
  • 在jest.config.js中指定这个setup文件:
module.exports = {
  setupFiles: ['./jest.setup.js'],
  // 其他测试配置...
};

4. 验证web3实例的初始化配置

确保测试环境中web3的Provider初始化正确,Infura Provider在测试环境可能需要额外指定chainId参数:

// 检查你的chains配置中web3的初始化代码,补充chainId
const web3 = new Web3(
  new Web3.providers.HttpProvider(`https://kovan.infura.io/v3/${process.env.INFURA_KEY}`, {
    chainId: 42,
    headers: [
      { name: 'Accept', value: 'application/json' },
      { name: 'Content-Type', value: 'application/json' }
    ]
  })
);

最后,你可以优化测试用例的断言逻辑,先验证结果是否存在:

test('Expect signed message', async () => {
  expect.assertions(1);
  const result = await getDepositSignedMessage();
  expect(result).toBeDefined(); // 先断言签名结果存在
  // 也可以进一步断言签名结构,比如expect(result.signature).toBeDefined();
}, 10000);

建议先尝试添加chainId和转换私钥这两个步骤,这是最常见的解决思路,如果还不行再排查web3版本和polyfill配置。

内容的提问来源于stack exchange,提问作者Yeasin Rahaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 16:59:11