Testing
如何在安全帽測試中使用 BigNumber 值?
我正在使用帶有 TypeScript/Ethers/Chai 的 Hardhat。我找不到測試 BigNumber 值的方法。
例如,
expect(someBigNumber).to.be.equal.to.(otherBigNumber)
將(可以理解)拋出一個像這樣的錯誤:AssertionError: expected 9999969797040000000000 to be a number or a date
.我安裝了 chai-bn 並按照此處的範例進行操作。我無法執行測試,因為
Property 'bignumber' does not exist on type 'Assertion'
. 我無法弄清楚這個問題,我也找不到一個可行的例子。chai-bignumber 也不起作用。如果有人能指出我正確的方向,我將不勝感激。
這個
ethereum-waffle
包做得很好。要使用它,請將其添加到您的
hardhat.config.ts
:import chai from "chai"; import { solidity } from "ethereum-waffle"; chai.use(solidity);
然後在您的測試中,您可以直接比較 ethers.js BigNumber 值:
expect(await token.balanceOf(wallet.address)).to.equal(993);
有關更多詳細資訊,請參閱ethereum-waffle 文件。
通過ethers github,我看到了這個解決方案:
let num = ethers.BigNumber.from(12); const INTEREST_RATE = 12; assert(num.eq(ethers.BigNumber.from(INTEREST_RATE)));
說明:eq() TypeScript 函式在https://github.com/ethers-io/ethers.js/blob/master/packages/bignumber/src.ts/bignumber.ts#L156
正常斷言適用於數字,但不適用於 BigNumbers
assert.equal(1, 1); // equals assert.equal(num, ethers.BigNumber.from(INTEREST_RATE)); // not equals