Мы используем супертест с Typescript
для тестирования API.
Для некоторых из них (например, регистрация пользователя, смена пароля и т. Д.) Отправляется адрес электронной почты, который требуется для подтверждения (токен подтверждения пользователя, токен сброса пароля и т. Д.).
Чтобы достичь этого, мы решили использовать GuerillaMail , так как это простой одноразовый почтовый клиент с API. После выполнения предварительных условий (настройки электронной почты с использованием их электронной почты) следующий фрагмент кода выполняет свою работу в нескольких случаях:
private async getEmailId(sid_token: string, emailType: EmailType): Promise<string> {
var mail;
var mailToken = this.getSidToken(sid_token);
//Keep trying until the email gets in the inbox
// Infinite loop is prevented by the jest framework timeout
while (!mail) {
const result = await request(this.guerillaMailApiUrl)
.get('')
.query({
f: 'check_email',
seq: 0,
sid_token: mailToken
});
if (result.body.list != undefined) {
mail = result.body.list.filter(m => m.mail_subject == emailType && m.mail_from == 'email@domain.com' && m.mail_read == 0)[0];
}
else {
mail = undefined;
}
}
return mail.mail_id;
}
Тем не менее, он имеет ограничение в 20 запросов в минуту, ограничение, которое приводит к сбою тестов.
Есть ли способ ограничить количество сделанных запросов?
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:
Я заставил это работать, создав задержку:
async delay(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
и вызов его прямо перед выходом из цикла while
:
await this.delay(5000);
Есть ли более чистый / приятный / эффективный / эффективный / и т.д. способ достижения этого?