hardhat 测试用例详细讲解

我们先看一个简单的测试例子,然后拆开来讲每一行

const { expect } = require("chai");

describe("Token contract", function() {
  it("Deployment should assign the total supply of tokens to the owner", async function() {
    const [owner] = await ethers.getSigners();

    const Token = await ethers.getContractFactory("Token");

    const hardhatToken = await Token.deploy();

    const ownerBalance = await hardhatToken.balanceOf(owner.address);
    expect(await hardhatToken.totalSupply()).to.equal(ownerBalance);
  });
});

先解释第一行,如果没有前段基础会看的很懵逼 。

此处我给一个前端的例子参考一下 :

// CommonJS模块
let { stat, exists, readFile } = require('fs');

// 等同于
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;

后面的第二行 都是固定写法 包括 describe ,it 等关键字 

这里我们在说一个例子

例如,如果我们要测试此功能:

function helloWorld() {
  return 'Hello world!';
}

我们会像这样写一个jasmine测试规范:

describe('Hello world', () => { ①
  it('says hello', () => { ②
      expect(helloWorld())③.toEqual('Hello world!'); ④
  });
});

        

说明:

  • ① describe(string, function) 函数定义了我们所谓的测试套件,它是各个测试规范的集合。
  • ② it(string, function) 函数定义了一个单独的测试规范,其中包含一个或多个测试期望。
  • ③ 预计(实际)表达式就是我们所说的一个期望。它与匹配器一起描述应用程序中预期的行为片段。
  • ④ matcher(预期)表达式就是我们所说的Matcher。如果传入的期望值与传递给Expect函数的实际值不符,则将布尔值与规范进行布尔比较。

我们回到我们的例子中:

ethers.js中的Signer 代表以太坊账户对象。

 它用于将交易发送到合约和其他帐户。

ethers.js中的ContractFactory是用于部署新智能合约的抽象,因此此处的Token是用来实例代币合约的工厂。

ContractFactory上调用deploy()将启动部署,并返回解析为ContractPromise。 该对象包含了智能合约所有函数的方法。

ethers变量在全局作用域下都可用。 所以呢 我们的第一个例子中没有加  const { ethers } = require("hardhat"); 也是正确的 ,加的话也可以。

猜你喜欢

转载自blog.csdn.net/bareape/article/details/123353321