產生多樣化的Chai斷言集合以供將來評估
P粉593649715
P粉593649715 2023-09-16 23:25:50
0
1
486

我有一些非同步(I/O綁定)任務要做,然後我想用Chaiassert傳回的值。而不是寫出像這樣的一段程式碼:

expect(await taskA.someAsync()).to.be.eq(something);
expect(await taskB.someAsync()).to.be.eq(something);

我想要等待所有任務完成,使用await Promise.all([taskA.someAsync(), taskB.someAsync()]),然後逐一expectassert結果。

我創建了這個函數(偽代碼)來使事情更通用:

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是否正確。其次,我不知道如何實例化一個包含不同類型斷言(如eqhave.lengthOf)的TransactionInfo數組。最後,我不知道如何在以後評估assertion物件。

P.S. 我不是一個專業的JavaScript開發者。請友善點:)

P粉593649715
P粉593649715

全部回覆(1)
P粉662089521
import { expect } from 'chai';

type TransactionInfo = {
  txn: Promise<any>; // 要等待的异步任务
  assertion: () => void; // 表示要在txn结果上运行的断言函数
};

const assertAll = async function (...txns: TransactionInfo[]) {
  let values = await Promise.all(txns.map((txnInfo) => txnInfo.txn));
  txns.forEach((txnInfo, index) => {
    txnInfo.assertion(values[index]);
  });
};

使用這段程式碼,現在可以建立一個TransactionInfo物件的數組,每個物件都有自己的自訂斷言函數:

// 示例用法:
const txn1: TransactionInfo = {
  txn: someAsyncTaskA(),
  assertion: (result) => {
    expect(result).to.be.eq(something);
  },
};

const txn2: TransactionInfo = {
  txn: someAsyncTaskB(),
  assertion: (result) => {
    expect(result).to.have.lengthOf(3);
  },
};

// 使用TransactionInfo对象数组调用assertAll函数
await assertAll(txn1, txn2);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板