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

译文出自:登链翻译计划

译者:翻译小组

校对: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

);});

名为GRAYSCALE LLC的新实体在特拉华州注册:金色财经报道,推特网友披露,特拉华州国务院网站显示当地时间12月22日,一个新实体GRAYSCALE LLC被注册。此外,2013年GRAYSCALE, LLC被注册,两个实体名称的区别仅仅在于一个逗号。

推特网友称,通过该网站可以查看多个灰度加密信托、官方母公司实体GRAYSCALE INVESTMENTS, LLC的注册信息。目前尚不清楚新实体GRAYSCALE LLC是否与灰度加密信托有关。[2022/12/23 22:03:10]

第一个测试:如果在质押金额没有达到阈值的情况下调用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

);});});

律所Rosca Scarlato代表部分FTX用户向Silvergate索赔:金色财经报道,律师事务所Rosca Scarlato代表被告知将资金存入Alameda Research账户来完成FTX充值的用户向Silvergate Capital进行索赔。

此前消息,Silvergate涉嫌协助将FTX客户资金转移到Alameda。(美通社)[2022/12/22 22:00:34]

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

本翻译由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反弹迫在眉睫?

灰度CEO:Grayscale Decentraland Trust为投资者接触元宇宙的一种方式:金色财经报道,Grayscale首席执行官 Michael Sonnenshein 在本周活动上表示,该公司已经将其Grayscale Decentraland Trust视为投资者接触元宇宙的一种被动方式。?对于那些不一定想积极管理Axie Infinity账户或为MANA建立和销售场景的投资者来说,Grayscale Decentraland Trust一直是一种有吸引力的方式。因此,这是投资者可以考虑将资金投入到一种资产中的一种方式,这种资产将随着像Decentraland本身这样的元宇宙的崛起而潜在地升值,这只是几个应用中的一个。我们一直在寻找我们也能带给投资者的其他资产。

MANA是灰度Decentraland信托背后的唯一资产,在过去24小时内上涨高达28%。在过去的14天里,MANA的价格已经上涨了超过253%。

Grayscale Decentraland Trust 于 2 月底推出,目前管理着 4920 万美元。它自成立以来上涨了 943.8%,仅在上个月就上涨了 235.9%。?[2021/11/13 6:49:41]

Base Protocol即将发布Cascade V2:1月6日消息,算法稳定币Base Protocol发推宣布将在不到一周时间内发布Cascade V2,目前V2版本的第一步——2x倍增器升级按钮已经添加到Base流动性挖矿项目Cascade当中。

在用户迁移到Cascade V2之前,提款/存款功能将被暂停。[2021/1/6 16:32:16]

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

银河链

狗狗币ZT創新板即將上線BCT

親愛的ZT用戶: ZT創新板即將上線BCT,並開啟BCT/USDT交易對。具體上線時間如下:交易:2021年11月14日15:00; BCT 項目簡介:BCT是BinanceSmartChain智能链上的一种TOKEN积分,拥有许多令.

[0:0ms0-3:161ms