1703879196
在运行前面的命令之后,会发现truffle将在artifacts文件中自动更新ConvertLib库和MetaCoin合约地址,并更新链接。
1703879197
1703879198
下面是可以提供给migrate子命令的一些其他重要选项:
1703879199
1703879200
·—reset。从最初开始运行所有移植(而非从上一个移植结束之后开始运行)。
1703879201
1703879202
·-f number。从一个特定移植运行合约。
1703879203
1703879204
1703879205
可以使用truffle networks命令实时在不同的网络中发现项目的合约地址和库。
1703879206
1703879207
1703879208
1703879209
1703879211
区块链项目开发指南 8.4.6 单元测试合约
1703879212
1703879213
单元测试是一种应用测试类型。单元是一个应用的最小可测试部分,在单元测试过程中单元被单个独立地进行测试。单元测试可以手动操作,但是通常都用自动操作。
1703879214
1703879215
truffle有一个单元测试框架,默认自动测试合约。在运行测试文件时,它提供一个干净的空间环境,也就是说,truffle在每个测试文件开始将重新运行所有移植,以保证有一套全新的合约用于测试。
1703879216
1703879217
truffle允许用两种不同的方式编写简单可管理的测试:
1703879218
1703879219
·在JavaScript中,从客户端执行合约。
1703879220
1703879221
·在Solidity中,从其他合约执行合约。
1703879222
1703879223
两种测试各有优缺点。我们将学习两种编写测试的方法。
1703879224
1703879225
所有测试文件都应置于./test目录中。truffle只运行扩展名为.js、.es、.es6、.jsx和.sol的测试文件。其他类型的文件都被忽略。
1703879226
1703879227
1703879228
在运行自动测试时,ethereumjs-testrpc比其他客户端的速度明显要快。此外,testrpc有一个特殊功能,可以让truffle节省90%的测试运行时间。推荐在常规开发和测试中使用testrpc;在现场或者生产网络中部署时,再次对go-ethereum或者另一个官方以太坊客户端运行测试。
1703879229
1703879230
1.在JavaScript中编写测试
1703879231
1703879232
truffle的JavaScript测试框架建立在Mocha之上。Mocha是一个用来编写测试的JavaScript框架,chai是一个assertion(声明)库。
1703879233
1703879234
测试框架用于组织和执行测试,而assertion库提供验证对错的方式。assertion库使测试代码变得容易,所以不必进行数千次if运算。大部分测试框架里没有assertion库,它们允许用户接入想接入的库。
1703879235
1703879236
1703879237
在继续向下学习之前,需要学习如何用Mocha和chai写测试。学习Mocha请访问https://mochajs.org/,学习chai请访问http://chaijs.com/。
1703879238
1703879239
测试应当位于./test目录中,并采用.js扩展名。
1703879240
1703879241
合约抽象是使JavaScript合约交互成为现实的基础。由于truffle不能检测到用户想在测试中与哪个合约交互,因此需要明确地询问这些合约。这就需要用到artifacts.require()方法。所以测试文件第一件要做的事就是为想测试的合约创建抽象。
1703879242
1703879243
然后,应当编写真实测试。从结构上看,应该与Mocha的测试基本保持不变。测试文件应当包含Mocha会认为是自动测试的代码。使truffle测试不同于Mocha的是contract()函数:该函数与describe()类似,除了它告诉truffle运行所有移植。contract()函数的工作原理如下:
1703879244
1703879245
·在运行每个contract()函数之前,合约被重新部署以运行以太坊节点,所以其中的测试都是在干净的合约状态下运行的。
[
上一页 ]
[ :1.703879196e+09 ]
[
下一页 ]