truffle测试

Truffle测试

一、快速入门truffle

(1)创建项目工程

为 Truffle 项目创建新目录:
mkdir MetaCoin
cd MetaCoin
下载 (“unbox”) MetaCoin box:
truffle unbox metacoin

在这里插入图片描述

在操作完成之后,就有这样的一个项目结构:

(2)项目结构

  1. contracts/MetaCoin.sol: 这是一个用 Solidity 编写的 MetaCoin 代币 智能合约。注意他还引用了目录下的另外一个合约文件 contracts/ConvertLib.sol
  2. contracts/Migrations.sol: 这是一个单独的 Solidity 文件,用来管理和升级智能合约. 每一个工程都有这样的一个文件,并且通常不需要编辑它。
  3. migrations/1_initial_migration.js: 这是一个部署脚本,用来部署 Migrations 合约,对应 Migrations.sol 文件。
  4. migrations/2_deploy_contracts.js: 这是一个部署脚本,用来部署 MetaCoin 合约. (部署脚本的运行是有顺序的,以2开头的脚本通常在以1开头的脚本之后运行)
  5. test/TestMetacoin.sol: 这是一个用Solidity编写的测试用例文件,用来检查合约是否像预期一样工作。
  6. test/metacoin.js : 这是一个用JavaScript编写的测试用例脚本,用途和上面一样。
  7. truffle-config.js (之前是 truffle.js): Truffle 配置文件, 用来设置网络信息,和其他项目相关的设置。当我们使用内建的默认的Truffle命令时,这个文件留空也是可以的。

(3)使用测试

运行 JavaScript 测试用例
truffle test ./test/metacoin.js

在这里插入图片描述

(4)编译合约

编译智能合约:
truffle compile

在这里插入图片描述

(5)使用 Truffle Develop 部署合约

为了部署我们的合约,我们需要连接到区块链网络。Truffle 提供了一个内置的个人模拟区块链,它可以帮助我们用来测试。注意,这个区块链是内地在我们本地的系统里面,他不和以太坊的组网进行连接。

我们可以使用Truffle Develop来创建区块链,并与之交互。

运行 Truffle Develop:
truffle develop

在这里插入图片描述

这也显示了10个账号,和他们对你的私钥,这些账号可以用来和区块链进行交互

在 truffle(develop)> 提示符(因为提供了一个交互式控制台)下, Truffle 的命令可以不带前缀 truffle 执行。比如,可以直接输入compile 来执行truffle compile,以及直接输入 migrate 来部署编译的智能合约到区块链(相当于truffle migrate):

migrate

在这里插入图片描述

(6)通过 Ganache 部署

除了用上面的 Truffle Develop,还可以选择使用 Ganache, 这是一个桌面应用,他同样会创建一个个人模拟的区块链。 对于刚接触以太坊的同学来说,Ganache 会更容易理解,因为他把所有的信息,都输在前端的界面。

不像 Truffle Develop 把链和控制台集成在一起,使用 Ganache 需要编辑配置文件,以便 Truffle 能链接 Ganache 实例。

  1. 下载安装 Ganache.
  2. 编辑器打开 truffle.js ,使用下面的内容:
module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  }
};

3.保存关闭配置文件。

4.启动Ganache

5.打开控制台,执行部署:

truffle migrate

在这里插入图片描述

在 Ganache 里,点击 “Transactions” 可以看到交易详情。

为了和合约进行交互,我们可以使用 Truffle 的控制台:truffle console, Truffle console 和 Truffle Develop 类似,仅仅是他们连接的链不一样而已,这里是连接 Ganache 。

truffle console

(7)合约交互

在 Truffle v5, 控制台支持 async/await 方法(同步方式), 这样让跟合约交互更简单了,方法如下:

  • 从获取部署合约实例 及获取账号列表 开始:

    truffle(development)> let instance = await MetaCoin.deployed()
    truffle(development)> let accounts = await web3.eth.getAccounts()
    
  • 检查账号余额:

    truffle(development)> let balance = await instance.getBalance(accounts[0])
    truffle(development)> balance.toNumber()
    
  • 查看以太价值(其实就是调用了一个合约方法:合约方法里定义了一个metacoin 价值 2 ether):

    truffle(development)> let ether = await instance.getBalanceInEth(accounts[0])
    truffle(development)> ether.toNumber()
    
  • 发送一些 metacoin 到其他的账号 :

    truffle(development)> instance.sendCoin(accounts[1], 500)
    
  • 检查刚刚收款人的余额:

    truffle(development)> let received = await instance.getBalance(accounts[1])
    truffle(development)> received.toNumber()
    
  • 检查刚刚发送方的余额:

    truffle(development)> let newBalance = await instance.getBalance(accounts[0])
    truffle(development)> newBalance.toNumber()
    

二、实战演练

1.创建测试项目

mkdir truffle_demo && cd truffle

truffle init  && npm init -y


在这里插入图片描述

2.导入合约

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

contract test_demo {
    address public owner;
    uint public last_completed_test;

    constructor() {
        owner = msg.sender;
    }

    modifier restricted() {
        require(
            msg.sender == owner,
            "This function is restricted to the contract's owner"
        );
        _;
    }

    function setCompleted(uint completed) public restricted {
        last_completed_test = completed;
    }
}

3.编译合约

truffle  compile

在这里插入图片描述

4.编写测试脚本

const  test_demo = artifacts.require("test_demo");

if ("owner succeed",async  function[] {
    
    

const myConttract = await test_demo.deployed[];

await debug[myContract.owner()];

} );

5.测试合约

truffle test

const test_demo = artifacts.require(“test_demo”);

if (“owner succeed”,async function[] {

const myConttract = await test_demo.deployed[];

await debug[myContract.owner()];

} );

5.测试合约

truffle test

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/2401_84837659/article/details/140799345