Contract-Development
Contract.deployed() 沒有按預期工作
我使用 Truffle 來測試合約。當我使用 Contract.deployed() 並獲取地址時,例如:
- 在第一個測試中,合約的地址是 0x07D899846146b3503dE9D9Dc36B94C2e428eA434
- 在第二個中,合約的地址是 0xF79f3B32b78ebD07B2E661b52e9CF374e311f1d5
另一個問題是,似乎每次我測試契約時,它的狀態都會重新初始化。
似乎
Contract.deployed()
create 的工作方式類似於Contract.new()
,它為每個測試創建一個新的契約實例。哪個會導致這個問題?
實際上我的許多類似問題還沒有回答(即使在 truffle 官方論壇上 80% 的問題也沒有解決),這清楚地表明要麼 truffle 開發人員失去了對項目的控制權意味著修補一方在另一方產生問題,或者他們離開了這個項目作為孤兒,所以不要指望你的問題有任何合乎邏輯的明確答案,我在很多地方問過簡單的問題,沒有人提到這一點,有人嘗試過,但在這里和那裡談論但不是重點,所以我希望這個他將是您問題的完美答案,謝謝
在為 Truffle 編寫測試時,您使用
contract()
函式。如文件中所述,此函式重新執行您的遷移腳本並Contract.deployed()
返回遷移期間部署的合約實例。您可以
beforeEach()
在那裡使用和部署新合約(可能會添加一些初始化事務)。這種方式更加明確和清晰,您總是可以看到您使用的是重新部署的契約還是使用過的契約。您不需要總是為測試使用相同的合約地址,因為您可以使用這些函式返回的合約實例,如果您需要合約地址,您可以通過(可能)
instance.address
或類似的方式訪問它。有關更多詳細資訊,請參閱truffle-contract
文件。