打字猴:1.703879223e+09
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()函数之前,合约被重新部署以运行以太坊节点,所以其中的测试都是在干净的合约状态下运行的。
1703879246
1703879247 ·contract()函数提供一个以太坊节点可用账户列表,可用于编写测试。
1703879248
1703879249
1703879250 由于truffle在后台使用Mocha,在不需要truffle功能时,还可以使用describe()运行正常的Mocha测试。
1703879251
1703879252 下面是truffle生成的,用于测试MetaCoin合约的默认测试代码。metacoin.js文件中的代码如下:
1703879253
1703879254
1703879255
1703879256
1703879257
1703879258
1703879259
1703879260 在上述程序代码中,所有合约的交互代码都是使用truffle-contract库编写的。
1703879261
1703879262 最后,truffle允许访问Mocha的配置,所以可以修改Mocha的行为。Mocha的配置在truffle.js文件的导出对象中被放在Mocha属性之下,例如:
1703879263
1703879264
1703879265
1703879266
1703879267 2.在Solidity中编写测试
1703879268
1703879269 Solidity测试代码在.sol文件中。使用Solidity写测试之前需要注意如下事项:
1703879270
1703879271 ·Solidity测试不能扩展自任何合约。这让测试尽可能小,用户还能完全控制自己编写的合约。
1703879272
[ 上一页 ]  [ :1.703879223e+09 ]  [ 下一页 ]