Web3js
無需等待的 Mocha 和 web3.js
等待解決對節點的呼叫對我有用,例如以下範例:
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 函式嗎?