我正在嘗試為以下方法創建一個笑話測驗。我得到了兩種情況的錯誤。
所以基本上在 checkKioskUserPhone 方法中,
通過電話號碼查找用戶(commonService.findKioskUserByPhone)
在 findKioskUserByPhone 方法中,我們將通過電話號碼查找用戶,并在未注冊或已注冊時發送錯誤訊息。
然后回傳用戶。
(回傳 checkKioskUserPhone)如果用戶沒有授權碼和密碼,我們將發送他/她的授權碼并回傳 jwt 等。
async checkKioskUserPhone(kioskLoginDto: KioskLoginDto): Promise<ResponseDto<UserAuthDto>> {
const user = await this.commonService.findKioskUserByPhone(kioskLoginDto);
const isConfirmedAuthCode = user.authCode === 'OK' ? true : false;
const isSetPin = user.pin ? true : false;
if (!isConfirmedAuthCode && !isSetPin) {
await this.userService.authenticatePhone(user.id, Builder(AuthorizePhoneDto).phone(user.phone).build());
}
const jwtInfo = await this.createToken(this.removeCredentialField(user));
return Builder<ResponseDto<UserAuthDto>>(ResponseDto)
.result(Builder(UserAuthDto).isConfirmedAuthCode(isConfirmedAuthCode).isSetPin(isSetPin).jwtInfo(jwtInfo).build())
.build();
}
async findKioskUserByPhone(kioskLoginDto: KioskLoginDto): Promise<User> {
const user = await this.userService.findOne({ where: { phone: kioskLoginDto.phone } });
// throw Error message when unregistered phone attempt to login
if (!user) {
throw new NotFoundException('User not found');
}
// throw Error message when registered phone by whatsapp attempt to login
if (user.provider !== Provider.KIOSK) {
throw new ConflictException('You are already joined by Whatsapp.');
}
return user;
}
笑話代碼
it('when unregistered phone attempt to login', async () => {
const phone = '2212223333';
const kioskLoginDto = Builder(KioskLoginDto).phone(phone).build();
service.commonService.findKioskUserByPhone = jest.fn().mockResolvedValue(null);
try {
await service.checkKioskUserPhone(kioskLoginDto);
expect('here').not.toBe('here');
} catch (error) {
expect(error).toBeInstanceOf(NotFoundException);
expect(error.message).toContain('User not found');
}
});
it('When registered phone by app attempt to login', async () => {
const phone = '2212223333';
const kioskLoginDto = Builder(KioskLoginDto).phone(phone).build();
const user = Builder(User).phone(phone).provider(Provider.WHATSAPP).build();
service.commonService.findKioskUserByPhone = jest.fn().mockResolvedValue(user);
try {
await service.checkKioskUserPhone(kioskLoginDto);
expect('here').not.toBe('here');
} catch (error) {
expect(error).toBeInstanceOf(ConflictException);
expect(error.message).toContain('You are already joined by Whatsapp.');
}
});
開玩笑錯誤截圖


uj5u.com熱心網友回復:
您正在重寫該findKioskUserByPhone方法以僅回傳 null:
service.commonService.findKioskUserByPhone = jest.fn().mockResolvedValue(null);
所以findKioskUserByPhone根本不會運行,模擬函式只是回傳 null,因此永遠不會拋出您期望的錯誤。相反,在這里:
const user = await this.commonService.findKioskUserByPhone(kioskLoginDto);
用戶正在設定到null這里:
const isConfirmedAuthCode = user.authCode === 'OK' ? true : false;
您正在嘗試訪問 的某些authCode屬性null,這會拋出TypeError您得到的。
您可能打算覆寫findOne用戶服務上的方法:
service.userService.findOne = jest.fn().mockResolvedValue(null);
所以你想要的錯誤實際上會拋出findKioskUserByPhone
(注意我不知道這是否真的是你提供模擬的用戶服務,我只是假設)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/460511.html
上一篇:獲取AttributeError:嘗試使用unittest框架對views.py進行單元測驗時,“TestCase”物件沒有屬性“assertTemplateUsed”
