Truffle Testing的問題和解釋

問題

當(dāng)我運(yùn)行truffle test的時(shí)候聊记,有點(diǎn)驚訝地發(fā)現(xiàn)測(cè)試過程里并不需要啟動(dòng)ganache-cli命令行程序变抽。翻看了truffleframework的文檔也是含糊其辭累舷,倒是處處暗示必須使用Ganache或者Truffle Develop作為測(cè)試的運(yùn)行時(shí)傲霸。

所以我開始動(dòng)手做試驗(yàn)宿刮。

試驗(yàn)

先去測(cè)試文件xxContractTest.js中使用console.log(accounts)打印輸出accounts岂嗓。重復(fù)運(yùn)行測(cè)試后汁展,結(jié)果始終是一致,如下:

[ '0x627306090abaB3A6e1400e9345bC60c78a8BEf57',
  '0xf17f52151EbEF6C7334FAD080c5704D77216b732',
  '0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef',
  '0x821aEa9a577a9b44299B9c15c88cf3087F3b5544',
  '0x0d1d4e623D10F9FBA5Db95830F7d3839406C6AF2',
  '0x2932b7A2355D6fecc4b5c0B6BD44cC31df247a2e',
  '0x2191eF87E392377ec08E7c08Eb105Ef5448eCED5',
  '0x0F4F2Ac550A1b4e2280d04c21cEa7EBD822934b5',
  '0x6330A553Fc93768F612722BB8c2eC78aC90B3bbc',
  '0x5AEDA56215b167893e80B4fE645BA6d5Bab767DE' ]

而且測(cè)試中打印出了運(yùn)行時(shí)的網(wǎng)絡(luò)始終是test厌殉,如下:

$ truffle test
Using network 'test'

我對(duì)這個(gè)網(wǎng)絡(luò)比較困惑食绿,原因是該項(xiàng)目的配置文件truffle.js并沒有聲明名稱為test的網(wǎng)絡(luò)。所以我需要更多的信息年枕,通過幫助命令./node_modules/.bin/truffle help test炫欺,得知了一下可選參數(shù):

Usage:        truffle test [<test_file>] [--compile-all] [--network <name>] [--verbose-rpc] [--show-events]
  Description:  Run JavaScript and Solidity tests
  Options: 
                <test_file>
                    Name of the test file to be run. Can include path information if the file does not exist in the
                    current directory.
                --compile-all
                    Compile all contracts instead of intelligently choosing which contracts need to be compiled.
                --network <name>
                    Specify the network to use, using artifacts specific to that network. Network name must exist
                    in the configuration.
                --verbose-rpc
                    Log communication between Truffle and the Ethereum client.
                --show-events
                    Log all contract events.

其中--network <name>引起了我的注意。我開始試驗(yàn)不同網(wǎng)絡(luò)熏兄,比如:truffle test --network develop品洛,結(jié)果有點(diǎn)意外:

Using network 'develop'.

  Contract: xxContract
[ '0x627306090abaB3A6e1400e9345bC60c78a8BEf57',
  '0xf17f52151EbEF6C7334FAD080c5704D77216b732',
  '0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef',
  '0x821aEa9a577a9b44299B9c15c88cf3087F3b5544',
  '0x0d1d4e623D10F9FBA5Db95830F7d3839406C6AF2',
  '0x2932b7A2355D6fecc4b5c0B6BD44cC31df247a2e',
  '0x2191eF87E392377ec08E7c08Eb105Ef5448eCED5',
  '0x0F4F2Ac550A1b4e2280d04c21cEa7EBD822934b5',
  '0x6330A553Fc93768F612722BB8c2eC78aC90B3bbc',
  '0x5AEDA56215b167893e80B4fE645BA6d5Bab767DE' ]

前后對(duì)比,不難發(fā)現(xiàn)摩桶,兩次輸出的賬戶是一致的桥状。我稍微思考了一下,覺得是這可能是truffle test的fallback機(jī)制硝清,因?yàn)榕渲梦募?code>truffle.js確實(shí)沒有任何設(shè)置develop的網(wǎng)絡(luò)辅斟。

供開發(fā)測(cè)試用的是local網(wǎng)絡(luò),配置如下芦拿,所以我重新針對(duì)該網(wǎng)絡(luò)運(yùn)行測(cè)試士飒。

local: {
            host: '127.0.0.1',
            port: 8545,
            network_id: '*'
        }

$ truffle test --network local      

此時(shí)運(yùn)行出錯(cuò),錯(cuò)誤是連接不上Ethereum Client蔗崎,這是符合期望的行為酵幕。


Could not connect to your Ethereum client with the following parameters:
    - host       > 127.0.0.1
    - port       > 8545
    - network_id > *
Please check that your Ethereum client:
    - is running
    - is accepting RPC connections (i.e., "--rpc" option is used in geth)
    - is accessible over the network
    - is properly configured in your Truffle configuration file (truffle-config.js)

Truffle v5.0.5 (core: 5.0.5)
Node v10.15.3

那么,究竟Truffle test的fallback機(jī)制是怎樣的呢缓苛?我們需要去源碼中尋找答案芳撒。

解釋

Truffle的命令組織,結(jié)構(gòu)比較簡(jiǎn)單未桥,可以快速定位到文件笔刹,如:trufflesuite/truffle/packages/truffle-core/lib/commands/test.js。其fallback機(jī)制集中在run方法中冬耿。

if (config.networks[config.network]) {
          Environment.detect(config, environmentCallback);
        } else {
          var ipcOptions = {
            network: "test"
          };

          var ganacheOptions = {
            host: "127.0.0.1",
            port: 7545,
            network_id: 4447,
            mnemonic:
              "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat",
            gasLimit: config.gas,
            noVMErrorsOnRPCResponse: true
          };

          Develop.connectOrStart(ipcOptions, ganacheOptions, function(
            started,
            disconnect
          ) {
            ipcDisconnect = disconnect;
            Environment.develop(config, ganacheOptions, environmentCallback);
          });
        }
      });

Develop.connectOrStart(...)方法其實(shí)和執(zhí)行truffle develop是相同的操作凤壁。所以不難知道斟览,truffle test是通過truffle develop啟動(dòng)新的節(jié)點(diǎn)钻蹬,然后設(shè)置了一系列可用的accounts

為了進(jìn)一步驗(yàn)證材料讶凉,可以驗(yàn)證下助記詞candy maple cake sugar pudding cream honey rich smooth crumble sweet treat是否會(huì)產(chǎn)生上述的十個(gè)賬號(hào)地址。

驗(yàn)證的方式很簡(jiǎn)單山孔,拷貝助記詞黏貼到在線bip39網(wǎng)站里懂讯,選擇ETH-Ethereum作為Coin,然后觀察輸出的地址台颠,確認(rèn)確實(shí)符合期望褐望。

bip39
address

2019-04-02

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市串前,隨后出現(xiàn)的幾起案子瘫里,更是在濱河造成了極大的恐慌,老刑警劉巖荡碾,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谨读,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坛吁,警方通過查閱死者的電腦和手機(jī)劳殖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拨脉,“玉大人哆姻,你說我怎么就攤上這事∶蛋颍” “怎么了矛缨?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帖旨。 經(jīng)常有香客問我箕昭,道長(zhǎng),這世上最難降的妖魔是什么解阅? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任盟广,我火速辦了婚禮,結(jié)果婚禮上瓮钥,老公的妹妹穿的比我還像新娘。我一直安慰自己烹吵,他們只是感情好碉熄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肋拔,像睡著了一般锈津。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凉蜂,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天琼梆,我揣著相機(jī)與錄音性誉,去河邊找鬼。 笑死茎杂,一個(gè)胖子當(dāng)著我的面吹牛错览,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播煌往,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倾哺,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了刽脖?” 一聲冷哼從身側(cè)響起羞海,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曲管,沒想到半個(gè)月后却邓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡院水,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年腊徙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衙耕。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昧穿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橙喘,到底是詐尸還是另有隱情时鸵,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布厅瞎,位于F島的核電站饰潜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏和簸。R本人自食惡果不足惜彭雾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锁保。 院中可真熱鬧薯酝,春花似錦、人聲如沸爽柒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浩村。三九已至做葵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間心墅,已是汗流浹背酿矢。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工榨乎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘫筐。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓蜜暑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親严肪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子史煎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容