譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
我知道,你想直接部署合約和前端,并立刻就開始在測試網上進行測試,但是......我們需要確定一切都按預期工作,而不需要在前端用戶界面上進行monkey測試。
因此,在文章的下一部分,我將介紹一些開發人員應該做的事情:測試合約邏輯!
Waffle
Waffle是一個用于編寫和測試智能合約的庫,它與ethers-js配合得非常默契。
Waffle有很多有幫助的工具。waffle中的測試是用Mocha和Chai一起編寫的。你可以使用不同的測試環境,但Waffle的匹配器(matcher)只能在chai下工作。
我們將使用Chai匹配器來驗證我們所期望的條件是否已經滿足。
在寫完所有的測試用例后,你只需要輸入yarntest,就會自動針對你的合約進行測試。
我不會解釋如何使用這個庫,我將專注于應該測試什么。
我們的合約已經實現了一些邏輯:
用mapping(address=>uint256)publicbalances保存用戶余額
有一個最小質押金額的閥值uint256publicconstantthreshold=1ether。
Scam Sniffer:仍有超1200個地址未撤銷SushiSwap合約漏洞相關權限:4月9日消息,反網絡釣魚解決方案 Scam Sniffer 提醒稱,仍有超 1200 個地址未撤銷 SushiSwap 合約漏洞相關權限。[2023/4/9 13:53:09]
有一個最大的時間限制(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()函數,質押已經完成,交易應該被撤銷,防止再次調用。
SBF:FTX很高興與 FSCA 合作,雙方已開始對話:金色財經報道,2月2日,據FTX創始人SBF在推特上透露:“FTX很高興與南非金融部門行為監管局(FSCA)合作,并感謝他們讓我們注意到這一點。我們不知道 FSCA 有任何外展活動,但很高興與 FSCA 合作以遵守監管要求,目前已經聯系開始對話。”據此前金十報道稱,南非加密貨幣交易者警告稱不要使用交易平臺FTX和BYBIT,另外去年九月南非金融部門行為監管局曾發布警告要求公眾在與 BINANCE GROUP 打交道時保持謹慎和警惕,因為根據 2002 年《金融咨詢和中介服務法》(FAIS 法),BINANCE GROUP沒有獲得在該國提供金融服務的許可無權在南非提供金融建議或中介服務。[2022/2/3 9:28:35]
第三個測試:在時間到deadline之后調用execute()函數。交易應該被撤銷,因為只能在時間到deadline之前調用execute()函數。
最后一個測試:如果所有的要求都滿足,那么execute()函數不會回退,并且所有都如預期一樣。在函數調用外部合約后,completed變量應該是true,外部合約balance應該等于用戶的質押金額,我們的合約余額應該等于0。
如果一切正常,運行yarntest應該會有這樣的輸出:
完整測試代碼
Solana區塊瀏覽器Solscan完成400萬美元種子輪融資:金色財經報道,Solana區塊瀏覽器Solscan已完成400萬美元種子輪融資,Multicoin Capital和Electric Capital領投,Jump Capital、Sequoia Capital、Alameda Research、Solana Capital、Signum Capital和CoinGecko等參投。Solscan將利用這筆資金改進其區塊瀏覽器并推出一個新的分析平臺Solscan Analytics,并推出新的NFT和DeFi分析功能。[2021/12/17 7:44:49]
下面我們來看看整個測試代碼:
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
培根品牌Oscar Mayer發布培根數字貨幣Bacoin:根據Bitcoinist報道,知名培根食品品牌Oscar Mayer于4月30日宣布發布新的數字貨幣Bacoin,該幣可直接購買該公司生產的培根,用戶可通過采礦、空投等方式獲取Bacoin。[2018/5/1]
);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反彈迫在眉睫?
ThelistingvotecampaignforGate.ioListingVote#220-MonstersClanhascometoanend.
1900/1/1 0:00:0011月11日下午17:00,Dreamverse宇宙守護者NFT限定盲盒將在Gate.ioNFT魔盒獨家上線,首日解鎖盲盒300個,單個盲盒作品售價9.9USDT,數量有限,先到先得.
1900/1/1 0:00:00親愛的用戶: 幣安流動性挖礦現已開放PERP/USDT流動性池。即刻添加流動性,瓜分總額2,800PERP挖礦收益,收益分配將依據用戶持有份額佔幣對池總份額比例而定.
1900/1/1 0:00:00Gate.io現已上線CERE/USDT、CERE/ETH、IMX/USDT、IMX/ETH、ENS/USDT、ENS/ETH、XTZ/USDT、XTZ/ETH、XTZ/BTC的流動性礦池.
1900/1/1 0:00:00Tocelebratethatwehavereached20KFollowersinourGate.ioSpanishTwitter.
1900/1/1 0:00:00AOFEX,basedinLondon,theUnitedKingdom,isagloballeadingserviceplatformofdigitalassetswithsecurity.E.
1900/1/1 0:00:00