宇宙链 宇宙链
Ctrl+D收藏宇宙链

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

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

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

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

Waffle

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

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

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

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

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

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

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

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

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

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

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

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

);});

Rescale与英伟达合作构建自动化工业元宇宙:7月19日消息,高性能云计算服务商Rescale宣布与英伟达达成合作,将 Nvidia GPU Cloud(NGC)集成到其用于高性能计算(HPC)应用程序的容器库中,帮助企业构建数字孪生并打造工业元宇宙的基础构建模块。据悉,韩泰轮胎已经在Rescale与英伟达合作构建的工业元宇宙中进行新轮胎设计研发,包括在虚拟世界中进行各种“数字孪生轮胎”的测试工作,继而加快产品开发速度。(venturebeat)[2022/7/20 2:24:16]

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

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

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

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

如果一切正常,运行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

);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

);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

);});});

Grayscale董事总经理:比特币已巩固其作为数字黄金的作用:Grayscale Investments董事总经理Michael Sonnenschein 表示,比特币正处于一个新的投资时代。他说:“比特币本身已经巩固了其作为价值存储或数字黄金的作用。” Sonnenschein预测,SEC批准比特币交易所交易基(ETF)是“何时”的问题,而不是“如果”的问题”。 Sonnenschein继续说:“越来越多的证据表明,这种资产类别不会消失。投资者希望获得这种资产,如果传统机构希望保持竞争力,它们将不得不为客户打开这种资产类别的大门。”(Cointelegraph)[2020/3/3]

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

本翻译由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.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

动态 | Etherscan 独立月活达500万 已验证7万个以太坊智能合约:以太坊区块浏览器Etherscan在邮件中表示,经过四年的发展之后,Etherscan目前的用户增长情况为:独立月活跃用户最多达到了500万,每月交付几十亿次接口调用,已验证超过7万个智能合约。Etherscan曾获得过DigitalCurrencyGroup的投资,是目前以太坊区块浏览器中最常用的一款。[2020/2/17]

上一篇:

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

动态 | Etherscan发布信标链测试网浏览器:以太坊浏览器Etherscan已发布信标链(Beacon Chain)测试网浏览器的Alpha版本。[2019/12/6]

标签:CONETHSTATHEAdvanced United ContinentETHA LendStabilize BSCPepe The Frog

币赢交易所热门资讯
【Ex-plus】第七期 ZT “Ex-plus(探索)” FLOKI项目申购

亲爱的用户: ????本期ZTEx-plusFLOKI项目申购如下:????项目名称:FLOKI ????项目介绍: ????FlokiInu的股票代码为FLOKI,是几个月前推出的一个代币.

1900/1/1 0:00:00
AAX 2周年感恩有你,百万豪礼大回馈

AAX2周年感恩有你,百万豪礼大回馈作者AAXManager过去15分钟内已更新亲爱的AAX用户:自AAX成立以来,已经走过2个年头.

1900/1/1 0:00:00
BKEX Global 关于Seed Incubator开启第十四期项目LQR(Laqira)活动的公告

尊敬的用户:? ?? BKEXGlobal即将在SeedIncubator开启LQR活动,详情如下:?开启时间:2021年11月12日12:00~14:00交易时间:2021年11月12日16:00上线交易对:LQR/USDT?充提时.

1900/1/1 0:00:00
盘中宝——Taproot 升级临近,城市代币趋势化明显

市场回顾币赢研究院曾在《盘中宝——元宇宙持续火爆;V神发文探讨城市代币》一文中解读了城市代币的兴起和发展趋势.

1900/1/1 0:00:00
SOL交易狂歡周,贏取15萬美元SOL獎勵!

活動時間:2021年11月08日下午04:00至2021年11月16日上午7:59點擊按鈕,立刻參與活動活動一:用戶完成充值,瓜分20,000美元等值SOL活動期間從其它交易平臺或錢包累計凈充值不低於4SOL的用戶,即可平分20.

1900/1/1 0:00:00
XT关于ETF产品AXS3S触发份额合并的公告

尊敬的XT用户: 由于杠杆ETF产品AXS3S的单价低至0.07USDT,触发了XT杠杆ETF产品份额合并机制。我们将在2021年11月10日10:30启动份额合并机制,将AXS3S的份额进行合并操作.

1900/1/1 0:00:00