Testing

如何在安全帽測試中使用 BigNumber 值?

  • February 15, 2022

我正在使用帶有 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 

引用自:https://ethereum.stackexchange.com/questions/103921