Web3js

無需等待的 Mocha 和 web3.js

  • January 31, 2019

等待解決對節點的呼叫對我有用,例如以下範例:

describe('some contract', async function () {

   ...

   it('data should be written correctly', async function () {
       let expectedResult = 1;
       let actualResult = await instance.getSomeData(param1);
       assert(actualResult == expectedResult); 
   })

什麼給了我奇怪的行為 - 具體來說,超時是當我嘗試在這樣的承諾的回調中斷言時:

describe('some contract', async function () {

   ...

   it('data should be written correctly', async function () {
       let expectedResult = 1;
       instance.getSomeData(param1).then(result => {
           assert(result == expectedResult); 
       })
   })

有沒有辦法做到這一點,或者是等待結果然後斷言的唯一方法?

這是一個 JS 問題,但無論如何,這裡是答案,因為在 JS 中編寫乙太坊測試時了解它很有用:

您的第二個程式碼片段的問題是您的測試案例在執行“then”部分之前被認為已完成。我建議盡量不要async/await混合then

變體 1(沒有非同步函式,返回承諾):

it('data should be written correctly', function () {
   let expectedResult = 1;

   return instance.getSomeData(param1).then(result => {
       assert(result == expectedResult);
   })
})

變體 2(帶有等待的非同步函式):

it('data should be written correctly', async function () {
   let expectedResult = 1;

   var result = await instance.getSomeData(param1);
   assert(result == expectedResult);
})

此外,我不太確定這是否是一個好主意:

describe('some contract', async function () {...})

當您內部只有it-calls 時,沒有理由在這裡使用 async 函式嗎?

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