00:00
因为这个VI里边确实它黑底,然后字又比较小,大家可能看不清楚,所以我还是就打开一个文本编辑器,在这里边大家字大一点,看得清楚对吧,白底黑字清楚一点,呃,大家如果要是觉得这个还是不清楚,就是没有一些语法高亮的话,那到时候我就再如果觉得大家不行,大大家觉得不行的话,我再把它换到一个就是IDE里面去编辑,可能大家看的会更清楚,如果没问题的话,我现在就先这样编辑啊,好,接着我们上节课大家已经看到我们已经定义了一个测试,就是it定义了一个测试,对吧?那接下来我们还想有其他的测试,怎么做呢?那其实很简单啊,就是同样。还是it不是if啊,It前面我们先定义一下我们想要做什么事,大家想到我们这个是car,这个方法里边好像我们也没做什么事,就是它有一个品牌,然后我们把它set一下,对吧,好像就是这个事情,所以说呢,我们能测的可能就是它的品牌是什么,然后我们能不能正常把它这个set进去,那现在我们就先定义一个,首先它应该有一个初始值,我们要查出来它现在值是不是我们给定的初始值,那这是一个基本的测试。
01:24
所以大家看这个他经常就会这么写,就是这好像语法上就就已经比较完整了,对吧,It should怎么样,Should,比方说has a initial bread,就它应该有一个初始化的品牌,就是咱们的这个测试的一个定义啊。呃,然后大家就可以想到,我们接下来的话,如果想要知道它的品牌到底是什么,那我们的这个函数是不是就要跟区块链做交互了,对吧。
02:07
Table,好,Table一个在这里啊,我们就在这里写吧,上面这看着有点不舒服,大家可以想到这个过程当中,我们其实就是要发送我们的请求,然后去跟区块链做交互,那这里边我们先定义一个brand brand等于。Contract点,大家还记得怎么样去去调用我们的函数方法吗?呃,我们的合约方法吗?合约函数methods,这是这是1.0的方式,对吧?Methods点,然后去要什么样的方法,我们就给它的方法名,因为我们定义它是一个public public变量,所以说直接用这个名字就可以取出来啊,这个都是很简单的啊,当然大家知道这个过程它其实是相当于后面是点call对吧,直接把它拷出来的,不是散,上面这个是发送交易,我们这个直接call就可以。
03:18
大家大家应该能想到这个过程,对于区块链来讲,它是一个同步调用还是异步调用。对于我们这里的WEB3来说,1.0里边全部都是异步调用,对吧?所以大家要注意了,那我们这个其实不能用普通函数的这种写法,那我们还应该要think of it对吧?如果跟上面风格一致的话,或者大家可以尝试把它写到一个回调里面去,所以我们还用了think of it的话,前面加上think关键字。那这里我们要用一个wa关键词,这样对吧?啊,这里可能需要注意一下,就是应该如果后边是做了这个异步调用的话,我们一般会把它定义成一个,定义成一个常量,或者说定义成一个袜的类型。
04:11
如果要是left的话,可能它的作用域会有问题。好,那么我们接下来已经拿到这个brand,那我们去断言一下吧,Aser点,呃,那我们就可以strict,我们不需要strict啊,直接E扣好了,看它是否相等,那谁跟谁是否相等呢?首先就是这个brand,拿到这个brand,它是否跟我们定义的以initial手brand相等,对吧?好,这个我就不要存了。好,那接下来大家应该想到,我们除了去看我们的初始值是否正确之外,还应该it should可以set,呃,New brand,对吧?我还可以去设置一个brand,大家应该就能想到这个我们应该跟前面一样,也是要。
05:15
要发请求的a think义步调用,然后后边我们就要给他一个新的值,对吧?那首先我们先定义一个新的值到底想给什么吧,New brand,我们本来是宝马,现在给个奔驰或者给个奥迪什么的吧,奥迪好,那接下来就是调用了,同样还是要调contract.methods,然后跟上它的方法,那我们的那个方法应该是set set brand,对吧?那这里我们应该不需要拿它的返回值,只要能set对就可以,Wa contract.method点。
06:12
好,这是我们能够想到,当然了,我们brand肯定有参数啊,New brand对吧,传进去,这是我们能够想到的这个调用,那这个调用我们其实这就不是call了,我们应该send了,对吧,所以大家可以看到我们。直接点send发一个,发一个交易对象from account0,这个大家可以随意指定,因为GALA里边默认十个账号,随便发都是解锁的,而且都有钱,呃,后面还可以指定GA,那我们这个指定也可以,他就用麦,呃,默认的这个GA limit和GA price就可以,好,那么我们这里就直接放在这里。好,那接下来大家就可以想到,那我们已经把它设置了,设置完了之后,我们应该怎么样去判定它呢?判定它设置成功没有呢。
07:09
那我们还得再去取一下对吧,就是看看现在真正就是我们现在的这一个brand是什么,那跟上面的定义是一样的啊。点好,那最后我们的断言就应该是。Equal,我们的brand是否跟new brand相等对吧?他们俩是否一样啊,就是这样的一个合约调用,所以大家就可以看到,其实非常简单,我们就是调用我们的合约的方法,然后看看之后做一个查询,看看它的值是不是符合我们的预期,是不是我们set brand更改了之后再查出来的,就是我们更改的那个值,非常简单的一个测试,对吧?好,那大家如果要是觉得这里let也可以的话,我们尝试一下啊,看看它的作用率或许也是可以的哦,我这里直接把这个复制粘贴到我们的bash里边来。
08:39
好,下面我们去执行一下Mo这个文件。我们看看结果怎么样好,大家可以看到我们的三个三个测试都已经通过了。而且大家可以看到就是这里边是有这个后边直行的时间的,对吧,前面这一个后边没有括号,那其实说明它应该是非常非常的短对吧,很短就完成了,所以所以就没有时间显示,然后我们第二个大家看到后面就有一个56毫秒黄色显示,就表示它的耗时还是稍微有点长的,那最后一个168毫秒就直接红色显示了,所以整个这个moar它这个框架给我们的提示还是很很到位的啊,不光测试通过不通过,它的耗时也能给我们显示出来,这就呃,大家还记得我们在deploy那个脚本里边还自己用了一个呃,Consult time对吧,去去测它的时间,这里Mo都直接能给我们把它做做完。
09:47
好,那么大家可以看到就是这就是我们一个完整的一个测试脚本,已经可以完成我们想要的对合约功能的一些测试,那接下来呢,给大家再再讲一下,就是我们这里边的一些生命周期,就是moar里边生命周期的一些东西,因为刚才也有同学问到,就是就是这个代码有点看不懂,就是就是本来这个代码可能还是量不大,应该比较简单,但关键是它里边有一些Mo的这些特殊用法,大家可能就会觉得有点看不懂了,对吧?比方说这里有一个before each,就是这个东西,大家可能就会觉得很很奇怪,这个明明就不是我们这里都找不到定义的一个东西,比方说这个it,还有这个describe,我们note里面根本没有这种用法,呃,所以这个就是前面跟大家强调的,它是moa里边给定的语法结构,给定的关键词,所以大家不要去纠结这个,我们上面明明明。
10:47
就没有require这样的东西啊,明明就没有定义这个b before each啊,那这个东西是怎么来的呢?呃,它是mota里边的东西,所以大家还记得我们一开始去执行这个Mo框架下的测试脚本的时候,我如果要不用Mo去执行,直接noe执行的时报错了,对吧?他找不到describe关键词,找不到it关键词,所以我们一定要用Mo去执行,那关于这一个生命周期方法啊,大家看一下就是这个before it什么意思呢?就是我们下面所写的每一个,每一个it就是一个测试对吧?Describe是一组测试,那每一个测试他们在执行之前都会去检查我们当前这一组里边有没有before before each,如果有before each的话,那每一个执行之前都要先执行这个before each啊,这就是它的特点,当然这里我们可以去简单的测试一下啊。
11:47
呃,大家不是就是对这个不太清楚他的这个行为吗?我们比方说这里我们pencillo一下大家就知道了,比方说我们pencillog叫我们打汉语吧,合约,合约已部署好,我们打一句这个看一看,然后再去执行一下,大家看看他输出的结果是什么。
12:26
大家可以看到啊,这个就很明显了,对吧,每一条,我们的每一条测试在执行之前,测试通过这个这行命令输出之前,都有一个合约已部署我们前面pencillo的内容,所以before each就是在每一个合约执行之前都要去做的一件事情。呃,那另外几个我们也简单的说一下啊,除了这个before each之外,大家还记得还有什么生命周期的东西吗?还有一个before,对吧?Before,那before这个东西就更简单了,它是什么呢?
13:06
他就是说我们整个这一组测试开始之前要做什么事,好,我们横受点log,我们给一个测试开始好,那大家可能想到除了这一个before和BEFORE1尺之外。我们记得之前还有after对吧?好,那这个after大家可能会怀疑我是不是一定要写在最后面呢?我们试一下,直接写在前面试一下。After本身的意思,那就是整个这一组测试对应before,整个这一组测试完成之后做什么事情,测试结束好,那当然了,还会有after each,对吧?
14:03
After each他会去做什么事情呢?他就是在我们每个测试,每个it执行完了之后,再去调一下这个啊,大家这个就是自己写一个实验的,这种测试的东西一下就知道了啊,然后我们写一个当前测试完成好好。保存一下,我们来执行一下,大家看看效果是什么样的啊。啊,当然这个执行起来好像稍微有点慢啊。嗯,好,所以大家可以看到我们刚才执行的before里边写的是测试开始,对吧,After是测试结束,然后每一个before each里边写了合约,调用了合约已部署这个,然后after each写了当前测试完成,所以大家看一下它会怎么输出呢?测试开始和测试结束只输出一次。
15:17
然后合约已部署,每次都有这是before each,然后当前测试完成,每次都有这是after each,大家一看这个就搞清楚到底是什么时候来执行了,对吧?呃,当然刚才我在改这个的时候,又是在BA里边,M里边,大家可能没看清楚,但是我觉得这个应该很简单,大家光听我说应该也知道做什么东西对吧?就是生命周期这样的几个几个函数关键字,Before after before each after each。
我来说两句