使用 @nomiclabs/hardhat-waffle 实现夹具
Posted
技术标签:
【中文标题】使用 @nomiclabs/hardhat-waffle 实现夹具【英文标题】:Implementing fixtures with @nomiclabs/hardhat-waffle 【发布时间】:2021-09-11 21:38:46 【问题描述】:在官方 waffle 文档中,您可能会找到实现固定装置的下一种方法:
import expect from 'chai';
import loadFixture, deployContract from 'ethereum-waffle';
import BasicTokenMock from './build/BasicTokenMock';
describe('Fixtures', () =>
async function fixture([wallet, other], provider)
const token = await deployContract(wallet, BasicTokenMock, [
wallet.address, 1000
]);
return token, wallet, other;
it('Assigns initial balance', async () =>
const token, wallet = await loadFixture(fixture);
expect(await token.balanceOf(wallet.address)).to.equal(1000);
);
it('Transfer adds amount to destination account', async () =>
const token, other = await loadFixture(fixture);
await token.transfer(other.address, 7);
expect(await token.balanceOf(other.address)).to.equal(7);
);
);
但是,在安全帽上使用该插件时,这将不起作用。插件文档中没有给出官方说明。
在下面回答。
【问题讨论】:
【参考方案1】:虽然您可以通过“Alt + 单击”每个变量自行找到解决方案,直到找到正确的类型结构,但最好使用这个 sn-p:
以下适用于 Typescript,如果你想在 javascript 上使用它,只需切换到使用“require()”导入以及摆脱类型:
import Wallet, Contract from "ethers";
import MockProvider from "ethereum-waffle";
import ethers, waffle from "hardhat";
const loadFixture, deployContract = waffle;
//Contract ABI
// For typescript only!
// In order to be able to import .json files make sure you tsconfig.json has set "compilerOptions" > "resolveJsonModule": true. My tsconfig.json at the bottom!
//For obvious reasons change this to the path of your compiled ABI
import * as TodoListABI from "../artifacts/contracts/TodoList.sol/TodoList.json";
//Fixtures
async function fixture(_wallets: Wallet[], _mockProvider: MockProvider)
const signers = await ethers.getSigners();
let token: Contract = await deployContract(signers[0], TodoListABI);
return token;
然后,在你的 mocha-chai 测试中
it("My unit test", async function ()
const token = await loadFixture(fixture);
// Your code....
);
我的 tsconfig.json 用于这个安全帽项目
"compilerOptions":
"target": "es2018",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"outDir": "dist",
"resolveJsonModule": true
,
"include": ["./scripts", "./test"],
"files": ["./hardhat.config.ts"]
【讨论】:
以上是关于使用 @nomiclabs/hardhat-waffle 实现夹具的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)