Truffle-Migration

收件人地址不是合約地址

  • September 3, 2018

好吧,我有一個名為Register. 測試腳本非常簡單:

const Register = artifacts.require("Register")

contract('Register', (accounts) =>  {
   let register;

   beforeEach('create new Register contract', async () => {
       register = await Register.new("test", 0, {from: accounts[0]});
   })

   it("test register enntity", async () => {
       register.entity().then(entity => {
           assert.equal(entity, accounts[0], "Entity is wrong!");
       })
   })
})

如果我在包含內容2_migrate_contracts.js的文件夾中創建migrations

var Register = artifacts.require("./Register.sol");

module.exports = function(deployer) {
 deployer.deploy(Register, "tesst", 0);
};

然後該truffle test過程沒有錯誤地完成。

據我所知,測試腳本創建了一個新Register合約,它應該與遷移的合約無關。因此,如果我註釋掉2_migrate_contracts.js文件並讓測試腳本完成所有工作。但是,我收到了這個錯誤:

"before all" hook: prepare suite:
Uncaught Error: Attempting to run transaction which calls a contract function, but recipient address 0x4f94fdfc235abc73a163bff1ba9341f6226ff6bd is not a contract address.

我試圖刪除該./build文件夾。沒有幫助。

所以我很困惑。是否truffle test必須從遷移過程開始?即,我不能跳過遷移過程並僅在測試腳本中創建新契約?

提前致謝。

=================== 更新======================

我只是向前邁了一步。在我的項目中,實際上還有另一個名為 的合約Authorization,因此,還有另一個名為 的測試文件TestAuthorization。現在,如果我按文件執行測試文件,例如:

truffle test ./test/TestRegister

然後測試就好了。但是,如果我使用truffle test. 然後’收件人地址不是契約地址‘錯誤再次出現。

根據 Josesph 的回复,據說**當您針對 Ganache 或 Truffle Develop 執行測試時,Truffle 將使用高級快照功能來確保您的測試文件不會相互共享狀態。**現在的問題是:如何執行多個測試truffle test

松露測試是否必須從遷移過程開始?即,我不能跳過遷移過程並僅在測試腳本中創建新契約?

是的你可以。

在你的2_migrate_contracts.js腳本中,改變這個:

module.exports = function(deployer) {
 deployer.deploy(Register, "tesst", 0);
};

對此:

module.exports = function(deployer, network, accounts) {
   if (network == "production")
       deployer.deploy(Register, "tesst", 0);
};

在您的truffle.js(松露配置)文件中,執行以下操作:

module.exports = {
   networks: {
       development: {
           host:       "127.0.0.1",
           network_id: "*",
           port:       8545,
           gas:        4712388,
           gasPrice:   100000000000
       },
       production: {
           host:       "127.0.0.1",
           network_id: "*",
           port:       8545,
           gas:        4712388,
           gasPrice:   100000000000
       }
   },
   ...
}

一旦過程完成,在松露測試過程中創建的合約將被刪除。這是因為 truffle 在測試開始時針對它創建的 testrpc 實例執行它。此實例在測試完成後關閉。

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

仍然需要按照文件中的說明進行遷移。

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