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

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

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

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

Waffle

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

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

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

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

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

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

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

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

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]

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

Etherscan正在为Arbitrum构建资源管理器,或将于7月准备就绪:以太坊扩容网络Arbitrum开发团队Offchain Labs宣布与以太坊区块链资源浏览器Etherscan达成合作关系,目前Etherscan正在为Arbitrum构建一个资源管理器,可能会在7月准备就绪。另外,区块链开发平台Alchemy将把其开发者平台带入到Arbitrum,旨在以低成本在Arbitrum上扩展去中心化应用。[2021/5/28 22:51:40]

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

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

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

);});

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

Scaramucci:比特币处在加密货币食物链顶端 仍然是首选:SkyBridge Capital的创始人Anthony Scaramucci表示,虽然最近几周比特币表现挣扎,其他加密货币飙升,但是加密货币中仍然应当持有比特币。他说,要说服投资者持有比特币仍然是几乎不可能的事,但他建议至少持有少量,因为比特币是唯一一个实现了“逃逸速度”的加密货币。“作为投资顾问,拥有30多年资产管理经验的人,我有责任告诉我的客户,持有1%、2%或是3%,”Scaramucci接受采访时表示。他早前还在特朗普政府期间非常短暂地担任过白宫通讯联络主任,他说,“我不是告诉他们要把100%的净资产都投进去,但如果我们的观点正确,比特币不应错过。”[2021/5/16 22:06:50]

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

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

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

去中心化服务平台AVA发布公共测试网Cascade:由康奈尔大学计算机学者Emin Gun Sirer创立的去中心化服务平台AVA宣布正式发布公共测试网Cascade,该测试网为AVA路线图规划中两个测试网版本的第一个,参与者在所发布的第一个版本中能够加入全局验证者网络并体验交易。[2020/4/18]

如果一切正常,运行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 涉足 NFT 将推出 “Scatter 市场”:据 IMEOS 报道,Scatter 官方发表一篇文章介绍自己团队正在与 dgoods,EOS 的 NFT 标准的各个团队合作,涉足 NFT 并推出自己的 “Scatter 市场”。据文中介绍,“Scatter 市场” 将与各个钱包进行合作使用户能够随时随地的查看、出价、出售和使用其他 “Scatter 桌面”提供的功能。其中 Scatter 最为看中的一项功能是用户可以设置价格拍卖物品并得到其他用户出价。[2019/2/20]

);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-0:725ms