recherche

Maison  >  Questions et réponses  >  le corps du texte

Le test ne génère pas d'erreur lorsque la valeur attendue est à l'intérieur de la boucle

J'essaie de refactoriser certains tests unitaires, mais j'ai découvert que l'attente à l'intérieur d'une boucle ne fonctionnait pas. Je suis en train de parcourir une énumération. J'ai le code suivant :

Des solutions ou solutions de contournement ?

it('should block approval of ads if status is not in pending revision', async () => {
  mockAdsRepository.findOne = jest.fn(() =>
    Promise.resolve({ ...adsDto, status: Status.REJECTED }),
  );
  await expect(service.approve(1, 1)).rejects.toThrow(BadRequestException);

  mockAdsRepository.findOne = jest.fn(() =>
    Promise.resolve({ ...adsDto, status: Status.UNPUBLISH }),
  );
  await expect(service.approve(1, 1)).rejects.toThrow(BadRequestException);

  // error trigger, working
  // mockAdsRepository.findOne = jest.fn(() =>
  //   Promise.resolve({ ...adsDto, status: Status.PENDING_REVISION }),
  // );
  // await expect(service.approve(1, 1)).rejects.toThrow(BadRequestException);

  //refactor
  Object.keys(Status).map(async (key) => {
    if (Status[key] !== Status./*changing this value for error triggers not working*/ ) {
      mockAdsRepository.findOne = jest.fn(() =>
        Promise.resolve({ ...adsDto, status: Status[key] }),
      );

      await expect(service.approve(1, 1)).rejects.toThrow(
        BadRequestException,
      );
    }
  });
});

P粉060112396P粉060112396516 Il y a quelques jours661

répondre à tous(1)je répondrai

  • P粉545910687

    P粉5459106872023-09-19 14:50:38

    Je pense que dans votre cas, le problème est que la carte ne gère pas les opérations asynchrones, donc à la fin de la boucle il y a plusieurs promesses en attente. Vous devez attendre que toutes les promesses de la carte soient résolues/rejetées.

    Vous pouvez utiliser cette fonction pour gérer toutes les promesses.

    export async function mapAsync<T, R>(
      elements: Promise<T>[] | T[],
      mapAction: (arg: T) => Promise<R>,
    ): Promise<R[]> {
      const results: R[] = [];
      for (const element of await Promise.all(elements)) {
        const mappedItem = await mapAction(element);
        results.push(mappedItem);
      }
      return results;
    }

    répondre
    0
  • Annulerrépondre