CON:scaffold-eth 挑战:测试覆盖率(Part3)

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

我知道,你想直接部署合约和前端,并立刻就开始在测试网上进行测试,但是......我们需要确定一切都按预期工作,而不需要在前端用户界面上进行monkey测试。

因此,在文章的下一部分,我将介绍一些开发人员应该做的事情:测试合约逻辑!

Waffle

Waffle是一个用于编写和测试智能合约的库,它与ethers-js配合得非常默契。

Waffle有很多有帮助的工具。waffle中的测试是用Mocha和Chai一起编写的。你可以使用不同的测试环境,但Waffle的匹配器(matcher)只能在chai下工作。

我们将使用Chai匹配器来验证我们所期望的条件是否已经满足。

在写完所有的测试用例后,你只需要输入yarntest,就会自动针对你的合约进行测试。

我不会解释如何使用这个库,我将专注于应该测试什么。

我们的合约已经实现了一些逻辑:

用mapping(address=>uint256)publicbalances保存用户余额

有一个最小质押金额的阀值uint256publicconstantthreshold=1ether。

基于区块链患者网络Humanscape完成约1500万美元C轮融资:5月12日消息,基于区块链的去中心化患者网络Humanscape完成200亿韩元(约1500万美元)C轮融资,新韩银行、新韩资产管理、教保证券、韩亚证券和Mint Venture Partners作为新投资者参投,GC Green Cross Holdings、Care Labs、UTC Investment等现有投资者追加投资。新资金将用于该公司进行进一步扩展其市场。据悉,Humanscape是一个基于区块链的去中心化患者网络。Humanscape可以通过基于社区活动的智力和情感互动,为患者克服疾病提供帮助。平台上由患者生成的健康数据 PGHD主导行使权完全归属于患者。[2023/5/12 14:59:09]

有一个最大的时间限制(deadline)uint256publicdeadline=block

);it('executerevertedbecauseexternalcontractalreadycompleted',async()=>{constamount=ethers

);it('executerevertedbecausedeadlineisreached',async()=>{//reachthedeadlineawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract

ProShares的比特币ETF日交易量超过Grayscale的GBTC:7月12日消息,根据彭博社Eric Balchunas提供的数据,ProShares比特币策略交易所交易基金(BITO)的每日交易量已超过灰度比特币信托基金(GBTC)。美国首个基于期货的比特币ETF交易代码为BITO,平均每天交易额为1.7亿美元。GBTC是顶级加密货币基金经理的皇冠上的明珠,录得1.379亿美元。[2022/7/12 2:06:31]

);it('externalcontractsucessfullycompleted',async()=>{constamount=ethers

);});

第一个测试:如果在质押金额没有达到阈值的情况下调用execute()函数,它将撤销交易并返回适当的错误信息。

第二个测试:连续两次调用execute()函数,质押已经完成,交易应该被撤销,防止再次调用。

第三个测试:在时间到deadline之后调用execute()函数。交易应该被撤销,因为只能在时间到deadline之前调用execute()函数。

最后一个测试:如果所有的要求都满足,那么execute()函数不会回退,并且所有都如预期一样。在函数调用外部合约后,completed变量应该是true,外部合约balance应该等于用户的质押金额,我们的合约余额应该等于0。

动态 | 外媒:etherscan.io被中国互联网防火墙阻止访问:中国的互联网防火墙疑似已阻止访问以太坊区块链浏览器网站etherscan.io,目前原因不明。据悉,etherscan.io是运行时间最长,使用最广泛的以太坊区块浏览器之一。(coindesk)[2019/12/4]

如果一切正常,运行yarntest应该会有这样的输出:

完整测试代码

下面我们来看看整个测试代码:

const{ethers}=require('hardhat');const{use,expect}=require('chai');const{solidity}=require('ethereum-waffle');use(solidity);//UtilitiesmethodsconstincreaseWorldTimeInSeconds=async(seconds,mine=false)=>{awaitethers

};describe('StakerdApp',()=>{letowner;letaddr1;letaddr2;letaddrs;letstakerContract;letexampleExternalContract;letExampleExternalContractFactory;beforeEach(async()=>{//DeployExampleExternalContractcontractExampleExternalContractFactory=awaitethers

动态 | Scatter紧急更新以紧急修复漏洞:Scatter发布一则声明,提醒用户立即更新Scatter电脑桌面版,这是一次紧急的漏洞修复。为了安全考虑,Scatter现在不公布漏洞的内容。[2018/11/27]

);describe('Testcontractutilsmethods',()=>{it('timeLeft()return0afterdeadline',async()=>{awaitincreaseWorldTimeInSeconds(180,true);consttimeLeft=awaitstakerContract

);it('timeLeft()returncorrecttimeleftafter10seconds',async()=>{constsecondElapsed=10;consttimeLeftBefore=awaitstakerContract

);});describe('Teststake()method',()=>{it('Stakeeventemitted',async()=>{constamount=ethers

);it('Stake0

);it('Stakerevertedifdeadlineisreached',async()=>{//LetdeadlinebereachedawaitincreaseWorldTimeInSeconds(180,true);constamount=ethers

动态 | 黑客试图破解Etherscan “评论区”:据CCN消息,以太坊块浏览器Etherscan阻止了一项黑客攻击,黑客试图“评论区”来提供恶意代码。用户在访问Etherscan官方网站时弹出一条可疑消息“1337”,表明黑客试图将恶意代码注入网站,此举可能是试图制造以太网钓鱼网站。值得庆幸的是,这个特殊的计划似乎没有导致任何资金损失。[2018/7/24]

);it('Stakerevertedifexternalcontractiscompleted',async()=>{constamount=ethers

);});describe('Testexecute()method',()=>{it('executerevertedbecausestakeamountnotreachedthreshold',async()=>{awaitexpect(stakerContract

);it('executerevertedbecauseexternalcontractalreadycompleted',async()=>{constamount=ethers

);it('executerevertedbecausedeadlineisreached',async()=>{//reachthedeadlineawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract

);it('externalcontractsucessfullycompleted',async()=>{constamount=ethers

);});describe('Testwithdraw()method',()=>{it('Withdrawrevertedifdeadlineisnotreached',async()=>{awaitexpect(stakerContract

);it('Withdrawrevertedifexternalcontractiscompleted',async()=>{//CompletethestakeprocessconsttxStake=awaitstakerContract

);it('Withdrawrevertedifaddresshasnobalance',async()=>{//LettimepassawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract

);it('Withdrawsuccess!',async()=>{//Completethestakeprocessconstamount=ethers

);});});

你是否注意到,测试代码的覆盖率远远大于合约本身?这就是我们想看到的!测试所有的东西!

本翻译由CellETF赞助支持。

来源:https://stermi.medium.com/how-to-write-your-first-decentralized-app-scaffold-eth-challenge-1-staking-dapp-b0b6a6f4d242

参考资料

登链翻译计划:https://github.com/lbc-team/Pioneer

翻译小组:https://learnblockchain.cn/people/412

Tiny熊:https://learnblockchain.cn/people/15

Waffle:https://ethereum-waffle.readthedocs.io/en/latest/index.html

Mocha:https://mochajs.org/

Chai:https://www.chaijs.com/

Chai匹配器:https://ethereum-waffle.readthedocs.io/en/latest/matchers.html

CellETF:https://celletf.io/?utm_souce=learnblockchain

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10481469.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

比特币进入牛市交叉点,BTC反弹迫在眉睫?

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:15ms0-0:780ms