??博主簡(jiǎn)介:
??????????云計(jì)算領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
??????????2022年CSDN新星計(jì)劃python賽道第一名??????????2022年CSDN原力計(jì)劃優(yōu)質(zhì)作者
??????????阿里云ACE認(rèn)證高級(jí)工程師
??????????阿里云開發(fā)者社區(qū)專家博主??交流社區(qū):CSDN云計(jì)算交流社區(qū)歡迎您的加入!
目錄
1.?使用 truffle console 訪問智能合約
2.?智能合約測(cè)試(truffle test)
2.1 編寫測(cè)試代碼
2.2 運(yùn)行測(cè)試腳本
1.?使用 truffle console 訪問智能合約
truffle console 是區(qū)塊鏈開發(fā)人員的強(qiáng)大工具,這是一個(gè)命令行工具,可以在命令行中執(zhí)行javascript代碼,與智能合約進(jìn)行交互。這對(duì)于開發(fā)智能合約非常有用。
我們已經(jīng)成功地將智能合約部署到本地區(qū)塊鏈網(wǎng)絡(luò),接下來我們將使用 truffle console 與智能合約進(jìn)行交互。
啟動(dòng) truffle console:
$ truffle console
進(jìn)入控制臺(tái)后,讓我們獲取已部署智能合約的一個(gè)實(shí)例,看看能否從該合約中讀取value
值。從控制臺(tái)運(yùn)行以下代碼:
MyContract.deployed().then((instance) => { app = instance } )
這里MyContract
是之前在遷移文件中創(chuàng)建的變量名稱,使用deployed()
函數(shù)獲取一個(gè)已部署合約的實(shí)例,并將其分配給promise
回調(diào)函數(shù)中的一個(gè)app
變量。
現(xiàn)在可以獲取智能合約中的value
值:
app.get()
// => 'myValue'
給value
設(shè)置一個(gè)新值:
app.set('New Value')
重新獲取智能合約中的value
值:
app.get()
// => 'New Value'
可以通過以下命令退出truffle console:
.exit
2.?智能合約測(cè)試(truffle test)
類似Java中JUnit單元測(cè)試工具,Trfuffle test可以幫助我們對(duì)智能合約項(xiàng)目進(jìn)行白盒測(cè)試。
對(duì)于區(qū)塊鏈項(xiàng)目,測(cè)試顯得尤其重要,因?yàn)椴渴鸷霞s、遷移合約的成本都是相當(dāng)高的,都要消耗Gas。
2.1 編寫測(cè)試代碼
現(xiàn)在讓我們對(duì)前面章節(jié)中創(chuàng)建的智能合約,編寫一些測(cè)試代碼。整個(gè)測(cè)試過程模擬對(duì)智能合約MyContract
獲取value
值、設(shè)置value
值的過程。
先確保MyContract
已經(jīng)正確部署到Ganache本地區(qū)塊鏈網(wǎng)絡(luò)中。測(cè)試中將會(huì)用到Mocha測(cè)試框架,與Chai斷言庫,但Truffle已經(jīng)集成了這些庫。
測(cè)試代碼用JavaScript編寫,模擬與智能合約的交互,就像使用truffle console所做的那樣。
在項(xiàng)目根目錄下的test
目錄中,添加測(cè)試腳本文件:?MyContract.js
MyContract.js
中的測(cè)試代碼:
// 首先,`require`合約并將其分配給一個(gè)變量`MyContract`
const MyContract = artifacts.require('./MyContract.sol');
// 調(diào)用“contract”函數(shù),并在回調(diào)函數(shù)中編寫所有測(cè)試
// 回調(diào)函數(shù)提供一個(gè)“accounts”變量,表示本地區(qū)塊鏈上的所有帳戶。
contract('MyContract', (accounts) => {
// 第1個(gè)測(cè)試:調(diào)用get()函數(shù),檢查返回值,測(cè)試合約中value初始值是否是: 'myValue'
it('initializes with the correct value', async () => {
// 獲取合約實(shí)例
const myContract = await MyContract.deployed()
const value = await myContract.get()
// 使用斷言測(cè)試value的值
assert.equal(value, 'myValue')
})
// 第2個(gè)測(cè)試: 調(diào)用set()函數(shù)來設(shè)置value值,然后調(diào)用get()函數(shù)來確保更新了值
it('can update the value', async () => {
const myContract = await MyContract.deployed()
myContract.set('New Value');
const value = await myContract.get()
assert.equal(value, 'New Value')
})
})
代碼說明,請(qǐng)見注釋。
2.2 運(yùn)行測(cè)試腳本
執(zhí)行命令行運(yùn)行測(cè)試:文章來源:http://www.zghlxwxcb.cn/news/detail-431782.html
$ truffle test
測(cè)試詳情:文章來源地址http://www.zghlxwxcb.cn/news/detail-431782.html
G:\qikegu\ethereum\mydapp>truffle test
Using network 'development'.
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Contract: MyContract
√ initializes with the correct value (76ms)
√ can update the value (78ms)
2 passing (188ms)
到了這里,關(guān)于以太坊 – 使用truffle console訪問智能合約的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!