1.安装

  • 下载node.js 利用npm 下载truffle :
npm install -g truffle
  • 安装本地Ganache

进入官网:https://trufflesuite.com/ganache/,我们下载对应的电脑系统的版本,下载安装包后,直接安装即可

按照进入ganache有两个选项

我们选择定制启动,可以配置我们的一个暴露端口,网络ID等等

2.部署

1.新建一个目录,打开终端输入 truffle init
2.接下来我们来将下面的HelloWorld合约放到我们工程中
pragma solidity ^0.5.2;
​
contract HelloWorld {
    string name;
    
    event setEvent (
        string name
    );
​
    constructor() public {
        name = "Hello, World!";
    }
​
    function get() public view returns (string memory) {
        return name;
    }
​
    function set(string memory n) public {
        name = n;
        emit setEvent(n);
    }
    
}
3.编写部署脚本(多个迁移文件,开头必须加数字,表明迁移顺序)
const Test = artifacts.require("Test");
 
module.exports = function (deployer) {
    deployer.deploy(Test, 1);
}
4.修改truffle-config.js 配置, 下面 的port对应也是本地Ganche
5.修改truffle-config.js 配置对应合约的版本
6.在终端输入 truffle compile编译
7.在终端输入truffle migrate部署

3.测试

创建test.js

执行truffle test ,出现下面,证明测试成功。

4.使用new创建合约

上面我们知道可以通过deployed获取以及部署到链上的合约,那么如何不通过第二步部署合约直接在测试脚本里测试合约呢,就可以通过new来创建一个合约实例。

首先我们在部署脚本那里添加两行代码来打印部署时的合约地址

再在测试脚本打印一下合约地址

我们truffle test 看看 发现部署时的地址和我们测试时的地址相同,说明是同一个对象

我们再写一个it测试,使用new来创建合约实例

test 测试

我们可以发现地址不一样了,说明我们new出来的是个新的实例对象,那由于我们是不同的对象,我们的数据肯定也就不共享了

5.使用call调用合约方法

前面我们都是通过.get()或者.set()直接调用的合约方法来进行调用合约,那么直接调用合约方法,和通过call调用有什么不同呢。 我现在有个需求,就是我希望通过调用set方法之后立刻给我返回修改的内容(在其它业务场景可以是添加一条记录返回添加的id) 下面我们修改一下合约

然后打印调用set的返回信息

可以看到返回的是个交易对象,那这样我们就不好拿到我们想要的修改内容(id)需要通过日志拿到(事件)result.logs[0].args.name;

下面我们通过call来调用set方法并打印回执信息:

我们可以看到得到的就直接是我们想要的内容

6.使用钩子函数

before(function() {    
​
    // 在此块中的所有测试之前运行  
​
});
​
after(function() {
​
   // 在此块中的所有测试之后运行  
​
});   
​
beforeEach(function() {
​
    // 在此块中的每个测试之前运行  
​
});   
​
afterEach(function() {    
​
    // 在此块中的每个测试之后运行 
​
});

上面我们有多个测试情况,但是是在每个it里面进行deployed或者new,那这样太麻烦了,我想就是创建一个实例,其它的测试都能使用那个实例咋办呢,那么我们就可以通过before来,下面是参考代码:

我们定义一个let 变量,然后通过before来在所有的it测试之间将合约拉下来,保存到helloWorld变量中,后续的it测试就直接使用这个实例

测试得到

假如我现在还有一个需求,希望每个it测试的环境独立干净,那么我们就可以通过beforeEach来实现

测试得到beforeEach打印了两次,且每个测试it的地址都不同

7.使用truffle develop 进行部署

我们安装truffle之后,有一个内置的的测试区块链网络,不需要连接本地Ganache。

区别与上文编辑连接配置,直接 控制台输入 truffle develop ,会进入truffle 控制台。

在truffle 控制台执行compile ,migrate 、test命令 会跟上文有同样的效果。

输入test进行测试

8.如何在测试脚本中计算1ether

9. 错误解决

1.版本和合约版本不一致

2.你truffle 配置文件的编译器版本和你测试合约要求编译器版本不适应。

3.像下方await 表名他是一个异步操作,返回一个promise对象,以及我们调用合约中的函数,在js测试文件都是异步操作,函数 加async 关键字, await修饰。

4.如何找sol编译器位置,找本地有多少编译器版本

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐