使用Truffle测试Solidity合约时遇TypeError: assert.equal is not a function错误
解决Truffle测试中
assert.equal is not a function错误 问题根源
你当前导入的assert来自Node.js的console模块:
const { assert } = require('console');
这个console.assert仅支持console.assert(条件, 提示信息)的简单断言格式,没有equal这类用于值对比的断言方法,所以调用assert.equal时会触发类型错误。
修复方案
有两种可行的修复方式,选其一即可:
方式1:使用Chai断言库的assert
你已经在代码中引入了Chai,直接替换导入语句为Chai的assert即可:
// 替换原来的console导入 const { assert } = require('chai');
方式2:使用Truffle内置的assert
Truffle测试环境默认提供了内置的断言工具,无需额外导入,直接删除const { assert } = require('console');这一行,代码中的assert.equal就能正常使用。
修复后的完整代码示例
const { assert } = require('chai'); const Tether = artifacts.require('Tether.sol'); const RWD = artifacts.require('RWD'); const DecentralBank = artifacts.require('DecentralBank'); require('chai') .use(require('chai-as-promised')) .should() contract('DecentralBank', ([owner, customer]) => { let tether, rwd, decentralBank; function tokens(number) { return web3.utils.toWei(number, 'ether') } before(async () => { tether = await Tether.new() rwd = await RWD.new() decentralBank = await DecentralBank.new(rwd.address, tether.address) await rwd.transfer(decentralBank.address, tokens('1000000')); await tether.transfer(customer, tokens('100'),{from: owner}); }) describe('Tether', async () =>{ it('matches name successfully', async () => { const name = await tether.name() console.log(name) assert.equal(name, 'Tether') }) }) })
内容的提问来源于stack exchange,提问作者Ali Moharrami
相关产品推荐
相关产品推荐

