見出し画像

Hardhat入門⑤-3(コントラクトのテスト) ~ブロックチェーンエンジニアになろう~

さて、今日もHardhat公式を元に進めていきますね。

今回は別のテストの例が紹介されていました。

早速見ていきましょう。

まずはテストフォルダに「Token2.js」を用意してください。

スクリーンショット 2021-12-08 8.00.35


こちらに以下をコピペします(Hardhat公式から)

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

describe("Transactions", function() {
 
 it("Should transfer tokens between accounts", async function() {
   const [owner, addr1, addr2] = await ethers.getSigners();
   const Token = await ethers.getContractFactory("Token");
   const hardhatToken = await Token.deploy();
   // Transfer 50 tokens from owner to addr1
   await hardhatToken.transfer(addr1.address, 50);
   
   expect(await hardhatToken.balanceOf(addr1.address)).to.equal(50);
   // Transfer 50 tokens from addr1 to addr2
   await hardhatToken.connect(addr1).transfer(addr2.address, 50);
   
   expect(await hardhatToken.balanceOf(addr2.address)).to.equal(50);
 });
});

では、見ていきましょう。

まずはこちらです。

const [owner, addr1, addr2] = await ethers.getSigners();

前回と異なり、アカウントを3つ用意していますね。

そして、デプロイなどは一番最初に持ってきたアカウントで実行されます。

次に前回と異なるのはここですね。

// Transfer 50 tokens from owner to addr1
   await hardhatToken.transfer(addr1.address, 50);

「transfer」とは今回のコントラクトに用意した関数で、誰かに送るためのものです。

具体的には「addr1.address」に対して、50送るように書いてあります。

このようにfunctionのテストも行っていそうですね。

expect(await hardhatToken.balanceOf(addr1.address)).to.equal(50);

こちらは前回と大体同じですが、「addr1.address」のトークンの値が50かどうかを確かめていますね。

そして、最大の山場がこちらです。

await hardhatToken.connect(addr1).transfer(addr2.address, 50);

いつもと何か違いますね。

そう、ここです。

.connect(addr1)

実は、普段のコントラクトの実行はデフォルトで、signerのアカウントリストの一番最初でやるようになっています。今回の場合、「owner」です。

でも違う人がコントラクトを実行するテストをする必要もあるかもしれません。

そんな時に、この「.connect(addr1)」を使います。

これによって、コントラクトを実行する人を変えることができます。

今回で言うと、デフォルトの「owner」ではなく、「addr1」さんが実行するように指定しています。


まだ、もう少し先がありそうですので、この続きは次回にしていきます。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊