Générer une collection diversifiée d'assertions Chai pour une évaluation future
P粉593649715
P粉593649715 2023-09-16 23:25:50
0
1
434

J'ai des tâches asynchrones (liées aux E/S) à effectuer et je souhaite ensuite utiliser la Chaiassertvaleur renvoyée. Au lieu d'écrire un morceau de code comme celui-ci :

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

Je veux attendre que toutes les tâches soient terminées, en utilisant await Promise.all([taskA.someAsync(), taskB.someAsync()]),然后逐个expectassertresults.

J'ai créé cette fonction (pseudocode) pour rendre les choses plus génériques :

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

Le but de cette fonction est await所有的txns,然后对每个txn运行每个assertionde vérifier la valeur renvoyée.

Tout d'abord, je ne suis pas sûr Chai.Assertion类型对于assertion是否正确。其次,我不知道如何实例化一个包含不同类型断言(如eqhave.lengthOf)的TransactionInfo数组。最后,我不知道如何在以后评估assertionobject.

P.S. Je ne suis pas un développeur JavaScript professionnel. S'il vous plaît soyez gentil :)

P粉593649715
P粉593649715

répondre à tous(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]);
  });
};

À l'aide de ce code, vous pouvez désormais créer un tableau d'objets TransactionInfo, chacun avec sa propre fonction d'assertion personnalisée :

// 示例用法:
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);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!