require('babel-polyfill');
//测试用例要在执行完了truffle compile和truffle migrate后才能使用truffle test来进行测试
//要注意artifacts只有在truffle框架里能使用
var CryptoPunksMarket = artifacts.require("./CryptoPunksMarket.sol"); //要注意contract只有在truffle框架里能使用,mocha中使用describe块开始
contract('CryptoPunksMarket-setInitial', function (accounts) {
//it为测试用例,是同步进行访问的,前面的string是用来解释该测试用例的测试目的是什么
it("Should start with 0 balance", async function () {
//声明使用的是truffle migrate部署好后的CryptoPunksMarket智能合约
var contract = await CryptoPunksMarket.deployed(); //然后调用里面的setInitialOwner初始化用户函数,将punk0的拥有者设为accounts[0]
await contract.setInitialOwner(accounts[0], 0);
//然后通过查看得到用户accounts[0]拥有的token数量
var balance = await contract.balanceOf.call(accounts[0]);
//这就是chai的断言部分,查看balance.valueOf()是否与1相等,如果是,则继续向下运
//行,如果不成功将会输出错误信息Didn't get the initial punk,而且该测试用例it回结
//束,最后会标明出错
assert.equal(balance.valueOf(), 1, "Didn't get the initial punk");
//查看punkIndex为0的拥有者是谁
var owner = await contract.punkIndexToAddress.call(0);
//拥有者应该是accounts[0],否则报错
assert.equal(owner, accounts[0], "Ownership array wrong");
//初始化punk有10000个,分配一个给accounts[0]后,应该还剩9999个
var remaining = await contract.punksRemainingToAssign.call();
assert.equal(9999, remaining); // todo Set this back to 10000 for final runs
var assignCoins = 100;
//给用户accounts[0]分配99个punk,包括之前那个,应该有100个
for (var i=1; i<assignCoins; i++) {
await contract.setInitialOwner(accounts[0], i);
}
//所以现在剩余的punk有10000-100个
var remainingAfter = await contract.punksRemainingToAssign.call();
assert.equal(10000-assignCoins, remainingAfter); var balanceAfter = await contract.balanceOf.call(accounts[0]);
assert.equal(assignCoins, balanceAfter); }),
//该用例也是用来分配punk的
it("bulk assign", async function () {
//该声明使用的合约与上面的测试用例是一样的,但是这里我会遇见一个问题,就是根据
//这个函数运行的逻辑来看,该it是在上面的it结束后才运行的,这样才能保证此时被分配
//的punk有110个,我们truffle test运行起来后发现的确是成功的,但是如果我们没有
//truffle的框架中运行的话,it其实是会同步运行的,所以我想可能是truffle在包装的时候
//进行了设置,所以它没有使用describe测试套件,而是使用了自定义的contract,这是我
//还存疑的地方
var contract = await CryptoPunksMarket.deployed();
var owners = [accounts[0], accounts[1], accounts[2], accounts[3], accounts[4], accounts[5], accounts[6], accounts[7], accounts[8], accounts[9]];
var punks = [1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009];
await contract.setInitialOwners(owners, punks);
for (var i = 0; i < 10; i++) {
var currentOwner = await contract.punkIndexToAddress.call(punks[i]);
assert.equal(currentOwner, owners[i]);
}
var remainingAfter = await contract.punksRemainingToAssign.call();
assert.equal(10000-110, remainingAfter);
}),
it("can not pass an invalid index to assign initial", async function () {
var contract = await CryptoPunksMarket.deployed();
try {
await contract.setInitialOwner(accounts[0], 10000);
assert(false, "Should have thrown exception.");
} catch (err) {
// Should catch an exception
} }),
it("only owner can assign initial", async function () {
var contract = await CryptoPunksMarket.deployed();
try {
await contract.setInitialOwner(accounts[1], 1);
assert(false, "Should have thrown exception.");
} catch (err) {
// Should catch an exception
} }),
it("Can not claim punk after set initial owners assigned", async function () {
var contract = await CryptoPunksMarket.deployed();
await contract.allInitialOwnersAssigned();
try {
await contract.setInitialOwner(accounts[0], 0);
assert(false, "Should have thrown exception.");
} catch (err) {
// Should catch an exception
} })
});

上面这个就是测试代码cryptopunksmarket-setinitial.js及其一些解释

cryptopunks测试代码cryptopunksmarket-setinitial.js的更多相关文章

  1. JS下高效拼装字符串的几种方法比较与测试代码

    在使用Ajax提交信息时,我可能常常需要拼装一些比较大的字符串通过XmlHttp来完成POST提交.尽管提交这样大的信息的做法看起来并不优雅,但有时我们可能不得不面对这样的需求.那么JavaScrip ...

  2. Lodop获取全部JS代码,传统JS模版的生成

    Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍传统JS模版的生成方法.两种模版都可以存入一下地方进行调用, ...

  3. js混淆代码还原-js反混淆:利用js进行赋值实现

    js混淆代码还原-js反混淆:利用js进行赋值实现   [不想用工具的直接看方法二] 本文地址:http://www.cnblogs.com/vnii/archive/2011/12/14/22875 ...

  4. mocha框架下,异步测试代码错误造成的问题----用例超时错误

    今天用抹茶(mocha)做个测试,发现有一个测试项目总是超时: describe("DbFactory functions",function(){ it("query ...

  5. .NET单元测试的艺术-3.测试代码

    开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...

  6. mysql锁 实战测试代码

    存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...

  7. 使用Microsoft Fakes隔离测试代码

    在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...

  8. iOS开发:XCTest单元测试(附上一个单例的测试代码)

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

  9. 在内核中异步请求设备固件firmware的测试代码

    在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...

随机推荐

  1. JAVA 的输入与输出流当中,什么时候该使用字符流?什么时候该使用字节流?

    1. InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象, 2. Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来 ...

  2. MySQL中表名重命名

    第一种办法:##修改表名, TO 或AS都可以,也以省略掉 ## ALTER TABLE 表名 RENAME [TO|AS] 新表名 ALTER TABLE user10 RENAME TO user ...

  3. SQL Server Service Broker(简称SSB)资料

    SQL server Service Broker (下面简称SSB) 是SQL server 里面比较独特的一个功能.它可帮助开发人员构建异步的松散耦合应用程序.SSB的一些功能和好处包括有: 数据 ...

  4. 10.C++-构造函数初始化列表、类const成员、对象构造顺序、析构函数

    首先回忆下,以前学的const 单独使用const修饰变量时,是定义的常量,比如:const int i=1; 使用volatile const修饰变量时,定义的是只读变量 使用const & ...

  5. Java坦克大战(四)

    这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想 ...

  6. Python全栈学习_day003知识点

    今日大纲: . 基础数据类型 总览 . int . bool . str . for循环 1. 基础数据类型 总览 int: 用于计算,计数等 str:'这些内容',用户少量数据的存储,便于操作 bo ...

  7. 2018-01-15 History in Threads: 火狐插件实现浏览历史按主题显示(树)

    History in Threads似乎是唯一一个业余项目里有确认用户的. 大部分JavaScript源码(300+行)也用了中文命名. 插件功能很简单, 就是根据网页点击顺序生成树, 每个树可以认为 ...

  8. 使用Twitter异常检测框架遇到的坑

    在Github上搜索“Anomaly Detection”,Twitter的异常检测框架(基于R语言)高居榜首,可见效果应该不错: 但是活跃度并不高,3-4年没人维护了: 因此在使用时难免会遇到一些坑 ...

  9. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...

  10. Android--很实用的图片工具类

    import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; imp ...