Saya mempunyai beberapa tugasan tak segerak (terikat I/O) untuk dilakukan dan kemudian saya ingin menggunakan nilaiChai
来assert
yang dikembalikan. Daripada menulis sekeping kod seperti ini:
expect(await taskA.someAsync()).to.be.eq(something); expect(await taskB.someAsync()).to.be.eq(something);
Saya mahu menunggu semua tugasan selesai, menggunakanawait Promise.all([taskA.someAsync(), taskB.someAsync()])
,然后逐个expect
或assert
hasil.
Saya mencipta fungsi ini (pseudokod) untuk menjadikan perkara lebih generik:
type TransactionInfo = { txn: Promise; // 要等待的异步任务 assertion: Chai.Assertion // 要在txn结果上运行的断言 } const assertAll = async function(...txns: TransactionInfo[]) { let values = await Promise.all(allTxns); for (let txnInfo of txns) { evaluate(txnInfo.assertion) } }
Tujuan fungsi ini adalahawait
所有的txns
,然后对每个txn运行每个assertion
untuk mengesahkan nilai yang dikembalikan.
Pertama sekali, saya tidak pastiChai.Assertion
类型对于assertion
是否正确。其次,我不知道如何实例化一个包含不同类型断言(如eq
或have.lengthOf
)的TransactionInfo
数组。最后,我不知道如何在以后评估assertion
objek.
P.S. Saya bukan pembangun JavaScript profesional. Harap baik hati :)
Menggunakan kod ini, anda kini boleh membuat pelbagai objek TransactionInfo, setiap satu dengan fungsi penegasan tersuainya sendiri: