我有一些非同步(I/O綁定)任務要做,然後我想用Chai
來assert
傳回的值。而不是寫出像這樣的一段程式碼:
expect(await taskA.someAsync()).to.be.eq(something); expect(await taskB.someAsync()).to.be.eq(something);
我想要等待所有任務完成,使用await Promise.all([taskA.someAsync(), taskB.someAsync()])
,然後逐一expect
或assert
結果。
我創建了這個函數(偽代碼)來使事情更通用:
type TransactionInfo = { txn: Promise<any>; // 要等待的异步任务 assertion: Chai.Assertion // 要在txn结果上运行的断言 } const assertAll = async function(...txns: TransactionInfo[]) { let values = await Promise.all(allTxns); for (let txnInfo of txns) { evaluate(txnInfo.assertion) } }
這個函數的作用是await
所有的txns
,然後對每個txn執行每個assertion
來驗證傳回的值。
首先,我不確定Chai.Assertion
類型對於assertion
是否正確。其次,我不知道如何實例化一個包含不同類型斷言(如eq
或have.lengthOf
)的TransactionInfo
數組。最後,我不知道如何在以後評估assertion
物件。
P.S. 我不是一個專業的JavaScript開發者。請友善點:)
使用這段程式碼,現在可以建立一個TransactionInfo物件的數組,每個物件都有自己的自訂斷言函數: