javascript 创建不同类型的ChaiAssert的数组,并在以后对它们求值

kmbjn2e3  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(94)

我有一些异步(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>; // Async task to be awaited
    assertion: Chai.Assertion // Assertion to be run on txn result
}

const assertAll = async function(...txns: TransactionInfo[]) {
  let values = await Promise.all(allTxns);
  for (let txnInfo of txns) {
    evaluate(txnInfo.assertion)
  }
}


这个函数应该做的是为所有txns运行await,然后为每个txn运行每个assertion以验证返回值。
首先,我不确定Chai.Assertion类型是否适用于assertion。其次,我不知道如何用不同类型的Assert(如eqhave.lengthOf)示例化TransactionInfo数组。最后,我不知道以后如何计算assertion对象。
P.S.我不是一个专业的JavaScript开发人员。请多多关照:)

iyzzxitl

iyzzxitl1#

import { expect } from 'chai';

type TransactionInfo = {
  txn: Promise<any>; // Async task to be awaited
  assertion: () => void; // Function representing the assertion to be run on txn result
};

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对象的数组,每个对象都有自己的自定义Assert函数:

// Example usage:
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);
  },
};

// Call the assertAll function with the array of TransactionInfo objects
await assertAll(txn1, txn2);

相关问题