來自新合約構造呼叫的 assertEventEmitted
目前,我無法看到或記錄到能夠輕鬆地將這樣的東西與 truffle 框架一起使用:
所以使用 chai 並編寫一個測試來部署一個類似這樣的合約。
c = await MyContract.new(); // this wont work... truffleAssert.eventEmitted(c, "ContractCreated", (ev) => { return ev.param === myInputParam; });
我的合約建構子將發出一個
ContractCreated
事件。我想斷言這發生了,並且值符合預期。事件本身及其內容無關緊要。它更多的是發出斷言事件的過程,並且契約建構時間很重要。我希望或希望我可以做這個斷言並使用
assertEventEmitted
上面的函式。目前我能看到的唯一方法是:
let event = c.allEvents({fromBlock: 0, toBlock: 'latest'}); event.watch(function (error, result) { if (!error){ console.log("Result: ", result); // or some assertions similar to assertEventEmitted(...) } });
我找不到一種優雅的方式來使用 truffle 工具集讀取合約建構期間發出的事件日誌。
當您發送交易時,您會獲得可以斷言的結果對象,在創建合約時返回的對像是不同的,因此日誌不可用於檢查事件發射。
有誰知道從松露合約創建呼叫中獲取這些事件日誌並使用該
truffle-assertions.assertEventEmitted
函式進行測試的方法?提前致謝。
將此問題的詳細資訊發佈到 github 以獲取 truffle 後,我得到了開發人員在此處概述的一些真正涉及的選項:https ://github.com/trufflesuite/truffle/issues/1196
總而言之,最簡單的方法是在測試場景中執行我上面展示的方法,直到 Truffle V5 出來,或者您可以
next
立即在 NPM 上移動版本。這將為您提供一些出色的語義來擷取 tx 收據並在合約創建呼叫結束時登錄回調。他們正在使用較新的 Web3.js 庫,這些庫在常用呼叫中添加了大量優化和輔助函式。
來自
cgewecke
:您可能感興趣的另一件事是 Truffle V5(可從 npm 以 truffle@next 的預發布形式獲得)。它使用 Web3 1.0 並允許您偵聽每筆交易的 transactionHash 和接收事件。您可以執行以下操作:
MyContract .new() .onReceipt( receipt => { truffleAssert(..etc..) done(); // Tell mocha you finished });
感謝https://github.com/cgewecke的所有幫助!
truffle-assertions 包可以很容易地解決這個問題。安裝軟體包後,您可以執行以下命令:
// Import the package to your file const truffleAssert = require('truffle-assertions'); // Deploy the contract let testContract = await TestContract.new() // Get the hash of the deployment transaction let txHash = testContract.transactionHash // Get the transaction result using truffleAssert let result = await truffleAssert.createTransactionResult(testContract, txHash) // Now look at the events using truffleAssert truffleAssert.eventEmitted(result, 'TestEvent');
您可以在此處找到有關該軟體包的更多資訊https://github.com/rkalis/truffle-assertions
您可以按如下方式安裝它: npm install truffle-assertions