【问题标题】:Implementing fixtures with @nomiclabs/hardhat-waffle使用 @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);
  });
});

但是,在安全帽上使用该插件时,这将不起作用。插件文档中没有给出官方说明。

在下面回答。

【问题讨论】:

    标签: typescript ethereum solidity waffle hardhat


    【解决方案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"]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2021-07-09
      • 1970-01-01
      相关资源
      最近更新 更多