Truffle

防止“松露測試”呼叫“松露部署(遷移)”

  • September 15, 2019

似乎truffle test自動呼叫truffle deploy(又名truffle migrate)。

就我而言,這兩個功能完全不相關。

所以我不太明白為什麼 Truffle 一開始就是這樣工作的。

文件似乎沒有提及有關此主題的任何內容。

我想truffle test用於一件事和truffle deploy另一件事。

有沒有辦法“告訴”truffle test避免跑步truffle deploy

謝謝!!!

我也遇到了這個問題,這確實是松露測試的預期行為:潔淨室行為。每次執行 truffle 測試都會重新部署合約。如果沒有,則先前執行的保存狀態可能會影響後續執行的結果,從而使您的測試套件具有不確定性。

但我想在執行松露測試之間保留狀態。建議的方法記錄為:

deployer.deploy(契約,{覆蓋:假})

不幸的是,由於解析錯誤,上述內容在 truffle 5.0.1 中似乎失敗了。因此,強制正確解析的解決方法是:

deployer.deploy(契約,{gas:6720000,覆蓋:false})

https://truffleframework.com/docs/truffle/testing/testing-your-contracts#clean-room-environment

潔淨室環境

Truffle 在執行測試文件時提供了一個潔淨室環境。在對 Ganache 或 Truffle Develop 執行測試時,Truffle 將使用高級快照功能來確保您的測試文件不會相互共享狀態。當針對其他乙太坊客戶端(例如 go-ethereum)執行時,Truffle 將在每個測試文件的開頭重新部署您的所有遷移,以確保您有一組新的合約可供測試。

真的很尷尬,松露作者的思想是多麼狹隘。我的測試執行他們自己在測試中使用的部署。就我而言,松露遷移包括將數據從舊實例複製到主合約的新實例,然後銷毀舊合約的步驟。不幸的是,這裡的快照沒有幫助,舊實例沒有恢復,並且缺陷實例保留在契約的 json 文件中。所以我必須阻止遷移腳本執行。所以有充分的理由,為什麼遷移應該是可選的和可配置的truffle test

我通過以下方式解決了它:

  • 使用canache-cli名為test
  • 如果truffle migrate腳本在網路test中,什麼也不做
  • truffle test使用選項執行--network test

詳細地:

在行首添加migrations/2_contract

module.exports = async function(deployer, network, accounts) {
 if (network == "test") return; // test maintains own contracts
 …
}

將新網路添加testtruffle-config.js

…
networks: {
 …
 development: {
   host: "127.0.0.1",
   port: 8545,
   network_id: "*"
 },
 test: {
   host: "127.0.0.1",
   port: 8546,
   network_id: "*"
 }
}
…

執行第二個canache-cli(除了一個正在執行的網路development

在一個控制台中,我development為我的 GUI 測試執行 ganache:

ganache-cli -d --db ${HOME}/tmp/ganache/development -i 123456 -p 8545

在另一個控制台中,我執行了一個單獨的 ganache test

ganache-cli -d --db ${HOME}/tmp/ganache/test -i 654321 -p 8546

就是這樣!現在我可以執行:

truffle migrate --reset

truffle test --network test

不受干擾。

引用自:https://ethereum.stackexchange.com/questions/49721