Jest.js 当expect在循环内时,测试不会抛出错误

jhdbpxl9  于 2023-08-01  发布在  Jest
关注(0)|答案(1)|浏览(152)

我试图重构一些单元测试,但我发现循环内的expect不起作用。我正在遍历枚举。我有以下代码:
对此有什么解决方案或变通办法吗?

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

字符串

omqzjyyz

omqzjyyz1#

我认为,你的例子中的问题是map不处理异步操作,所以你在循环结束时有几个pending状态的promise。你应该等待所有来自map的promise被解析/拒绝。
你可以使用这个函数来处理所有的promise。

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

字符串
第一个月

相关问题