Truffle-Deployment
.deployed() 和 .new() 有何不同?
當我嘗試在 truffle test javascript 中測試我的契約時,通過
instant = await myContract.deployed()
and為我的契約創建新的即時有什麼不同instant = await myContract.new()
?一樣嗎?看來我必須deployed
在 side beforeEach 函式中使用如下,beforeEach('for each test...', async function() { instant = await myContract.deployed(); });
每次,要生成新的瞬間然後我必須使用
new()
,如果我只想在我的每個單元測試中使用相同的瞬間,那麼我必須使用deployed()
?如果我錯了,請糾正我。
你說的對。
Truffle 測試來自 truffle-contract
deployed
。new
如果您查看文件:deploy():創建代表 MyContract 管理的預設地址的 MyContract 實例。
new():將這個合約的新版本部署到網路,得到一個代表新部署實例的 MyContract 實例。
AFAIK,當您執行時
truffle test
,最初它將通過您的遷移腳本,並將新合約遷移到您在truffle.js
. 當您從 獲取實例時deployed()
,您實際上是從這些最初部署的合約之一獲取 javascript 實例。另一方面,當你從 獲取實例時
new()
,它會重新將合約部署到網路上,並返回相應的 javascript 實例。因此,如果您的合約有狀態,並且測試的結果取決於它們執行的順序,那麼您需要使用
new()
beforeEach 來為各個測試獲取潔淨室環境。請注意,如果您使用
contract()
函式,則在執行每個 contract() 函式之前,您的合約將重新部署到正在執行的乙太坊客戶端,因此其中的測試以乾淨的合約狀態執行。