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

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

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

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

Waffle

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

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

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

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

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

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

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

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

Scopescan:CyberConnect已于链上部署CYBER合约:8月1日消息,据Scopescan监测显示,Web3社交图谱协议CyberConnect已于3小时前在链上部署CYBER合约,合约地址为0x14778860E937f509e651192a90589dE711Fb88a9,目前尚未进行转账。[2023/8/1 16:11:36]

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

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

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

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

);});

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

TwitterScan完成456万美元种子轮融资:9月24日消息,Web3去中心化社会识别平台 TwitterScan宣布完成456万美元种子轮融资,Redpoint Ventures领投,Sky9 Capital、UpHonest Capital、KuCoin Ventures、Huobi Ventures、Gate Labs、Mirana Ventures、Element、NGC、Antalpha Ventures、7upDAO、Redline Dao、Cobo Ventures、LingFeng Capital、Fenbushi US、CyberConnect、SNZ、Viabtc Capital、SF Capital、MetaStone Capital、OneBoat Capital、BitCoke Ventures、MEXC Ventures、Alchemy Pay、Nstone和YM Capital参投。

据悉,TwitterScan由MetaScan Labs创立,将利用这笔资金加速其 DID生态系统和轻量级社交平台的发展,并与CyberConnect和Link3合作开发.NFT DID社交基础设施和构建Web3域名系统。(Globenewswire)[2022/9/24 7:18:22]

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

peaq推出Polkadot生态系统区块链浏览器peaqScan:7月7日消息,开源区块链开发、孵化和部署实验室peaq宣布为Polkadot和Kusama生态系统推出基于Substrate的开源区块链浏览器peaqScan,提供Agung测试网数据的可视化图表。该浏览器可以在peaq的GitHub下载。(Cryptoninjas)[2022/7/7 1:57:19]

第三个测试:在时间到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

Candy Digital将于下周发布基于NASCAR Cup系列赛车的NFT:2月9日消息,NFT工作室Candy Digital将于下周发布将发布基于总共10支车队的23辆NASCAR Cup系列赛车的NFT,这些车队包括Hendrick Motorsports、Joe Gibbs Racing、Stewart-Haas RRacing、Richard Childress RRacing和Roush Fenway Keselowski Racing。

需要明确的是,Candy Digital是与Race Team Alliance达成的协议,而不是NASCAR联盟本身。Race Team Alliance是一个代表联盟中13支车队集体商业利益的组织。

此外,Candy Digital大股东体育商品公司Fanatics首席执行官Scott Lawin称,Fanatics的NFT业务将与更多体育项目合作,并计划进军娱乐领域。

去年10月,Candy Digital以15亿美元的估值完成1亿美元A轮融资,Insight Partners、软银的 Vision Fund 2共同领投,Connect Ventures、Will Ventures、Gaingels、Athletes Syndicate、退役NFL球员Peyton Manning及其他未透露姓名的职业运动员等参投。

据悉,Candy Digital由Fanatics首席执行官Michael Rubin与Galaxy Digital创始人兼首席执行官Mike Novogratz以及投资者和NFT企业家Gary Vaynerchuk共同创立。(Decrypt)[2022/2/9 9:41:09]

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

PolkaScan数据显示出现错误,波卡主网未停止出块:据Subscan信息显示,当前波卡主网正常出块,未出现停止出块的事故。此前有部分用户反应,根据 PolkaScan 数据显示,波卡主网已停止出块超过三小时。经对比应为 PolkaScan 数据显示错误,波卡主网未受影响。[2021/6/17 23:45:24]

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

);});});

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

本翻译由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-4:393ms