當期望值在循環內部時,測試沒有拋出錯誤
P粉060112396
P粉060112396 2023-09-18 15:34:42
0
1
613

我正在嘗試重構一些單元測試,但發現循環內的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,
      );
    }
  });
});

P粉060112396
P粉060112396

全部回覆(1)
P粉545910687

我認為,在你的情況下問題是map不處理非同步操作,所以在循環結束時有幾個處於掛起狀態的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;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板