Heim  >  Fragen und Antworten  >  Hauptteil

Generieren Sie eine vielfältige Sammlung von Chai-Behauptungen für die zukünftige Auswertung

Ich habe einige asynchrone (E/A-gebundene) Aufgaben zu erledigen und möchte dann den Chaiassertzurückgegebenen Wert verwenden. Anstatt einen Code wie diesen zu schreiben:

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

Ich möchte mit await Promise.all([taskA.someAsync(), taskB.someAsync()]),然后逐个expectassertErgebnissen warten, bis alle Aufgaben abgeschlossen sind.

Ich habe diese Funktion (Pseudocode) erstellt, um die Dinge allgemeiner zu gestalten:

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)
  }
}

Der Zweck dieser Funktion besteht darin, await所有的txns,然后对每个txn运行每个assertionden zurückgegebenen Wert zu überprüfen.

Zunächst einmal bin ich mir nicht sicher, Chai.Assertion类型对于assertion是否正确。其次,我不知道如何实例化一个包含不同类型断言(如eqhave.lengthOf)的TransactionInfo数组。最后,我不知道如何在以后评估assertionObjekt.

P.S. Ich bin kein professioneller JavaScript-Entwickler. Bitte seid nett :)

P粉593649715P粉593649715398 Tage vor457

Antworte allen(1)Ich werde antworten

  • P粉662089521

    P粉6620895212023-09-17 14:13:13

    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);

    Antwort
    0
  • StornierenAntwort