我正在嘗試重構一些單元測試,但發現循環內的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, ); } }); });
我認為,在你的情況下問題是map不處理非同步操作,所以在循環結束時有幾個處於掛起狀態的promise。你應該等待map中的所有promise被解決/拒絕。
你可以用這個函數來處理所有的promise。