[英]How to mock Twilio using Jest and TypeScript for unit testing
[英]Twilio API mocking unit testing in Nestjs using Jest
我有這個twilio.service.ts
文件。 我想在twilio.service.spec.ts
中編寫一個單元測試,用於驗證 OTP 已成功發送或因缺少參數而失敗的兩種情況。
twilio.services.ts :
async startVerification(
startVerificationDto: StartVerificationDto
) {
try {
const verificationResponse = await this.twilioClient.verify
.services("TWILIO_VERIFY_SERVICE_SID")
.verifications.create({
to: `+91${sendVerificationCodeDto.phoneNumber}`,
channel: "sms",
locale: "en",
});
return verificationResponse;
} catch (error) {
throw new BadRequestException("Failed sending OTP");
}
}
到目前為止它嘗試過:
it("Should be able to send verification code on mobile number", async () => {
const actualRes = await controller.startVerification({
phoneNumber: "xxxxxxxxxxx",
});
expect(twilioService.twilioClient.verify.services).toBeCalledWith(
"TWILIO_VERIFY_SERVICE_SID"
);
expect(actualRes).toEqual({
sid: "VA_TWILIO_VERIFY_SERVICE_SID",
});
});
it("Should return error if required parameters are missing", async () => {
expect(twilioService.twilioClient.verify.services).not.toBeCalledWith(
"TWILIO_VERIFY_SERVICE_SID"
);
try {
await controller.startVerification({
phoneNumber: "xxxxxxxxxxx",
});
} catch (e) {
expect(e.message).toBe("Failed sending OTP");
}
});
我主要關心的是:如何模擬 Twilio 的嵌套函數(驗證>服務>驗證>創建)。 此外,在 mocking 之后,我如何在 spec.ts 文件中調用或使用它。
Twilio 開發人員布道師在這里。
Mocking 嵌套對象和 function 調用比困難更煩人。 我認為這樣的事情應該適合你:
(在您的示例中,我不確定controller
與twilioService
之間的關系。我已嘗試在此處模擬twilioClient
上的twilioService
,但您可能需要根據事物的組合方式進行調整。)
it("Should be able to send verification code on mobile number", async () => {
const mockVerificationCreate = jest.fn().mockResolvedValue({
sid: "VA_TWILIO_VERIFY_SERVICE_SID"
})
const mockVerifyService = jest.fn().mockReturnValue({
verifications: {
create: mockVerificationCreate
}
})
twilioService.twilioClient = {
verify: {
services: mockVerifyService
}
}
const actualRes = await controller.startVerification({
phoneNumber: "xxxxxxxxxxx",
});
expect(twilioService.twilioClient.verify.services).toBeHaveBeenCalledWith(
"TWILIO_VERIFY_SERVICE_SID"
);
expect(mockVerificationCreate).toHaveBeenCalledWith({
to: "+91xxxxxxxxxxx",
channel: "sms",
locale: "en",
});
expect(actualRes).toEqual({
sid: "VA_TWILIO_VERIFY_SERVICE_SID",
});
});
讓我知道這是否有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.