【发布时间】:2022-07-27 03:00:01
【问题描述】:
我需要这样的柴
const BigNumber = web3.BigNumber;
require('chai').use(require('chai-bignumber')(BigNumber)).should();
在测试期间
let balance = await contract.balanceOf(accountToReceive);
should.be.bignumber.eql(countToSend); //works fine
ownerBalance = await contract.balanceOf(owner);
should.be.bignumber.equal(settings.initialSupply.mul(utils.toBN(10).pow(_decimals)).sub(countToSend)); // gives en error
错误码是
AssertionError: expected <BN: 94e47b8d68171533ffff9c> to equal <BN: 94e47b8d68171533ffff9c> + expected - actual at Context.<anonymous> (test/MOS.test.js:79:33) at processTicksAndRejections (node:internal/process/task_queues:96:5)
【问题讨论】:
-
出现问题出在 .sub 中,但我仍然无法修复它。
-
你为什么使用
equal?它们将是不同的 BigNumber 对象,不是吗?我认为您应该使用eql。请记住,expect({ a: 1 }).to.equal({ a: 1 });失败是因为它们不是同一个对象。但是expect({ b: 2 }).to.eql({ b: 2 });通过了,因为它进行了深度比较。 -
我得到同样的错误,只是在 equal 的地方有 deep equal
AssertionError: expected <BN: 94e47b8d68171533ffff9c> to deep equal <BN: 94e47b8d68171533ffff9c> -
更新:问题出在 .add 和 .sub 中。当我将 BN 转换为数字时,添加它们然后将它们转换回 BN 它将起作用。但是有些数字太大了,无法双向转换为 Number 类型
-
更新:我已经解决了使用 BigInt 的问题,使用 BigInt 对象进行所有数学运算,然后使用 utils.toBn(someBigIntNumber.toString()) 但我认为应该有更好的解决方案