防止“松露測試”呼叫“松露部署(遷移)”
似乎
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 … }
將新網路添加
test
到truffle-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
不受干擾。