Мне нужно получить URL-адрес из электронного письма, отправленного в начале сценария кипариса.
Ожидание электронной почты и получение URL-адреса внутри нее - асинхронная задача, поэтому я создал плагин cypress под названием «readMail»: он будет принимать адрес электронной почты в качестве входных данных, ждать, пока API gmail действительно получит адрес электронной почты, получателем которого является этот адрес, затем прочитайте письмо и верните обещание, разрешающее URL-адрес, содержащийся в теле письма. Этот процесс работает нормально, потому что в журналах плагина правильно отображается извлеченный URL.
Моя проблема состоит в том, чтобы сделать этот extractedUrl
доступным для последующего использования в качестве параметра, например cy.visit(extractedUrl)
: вне тела task(...).then(...)
, переменная все еще не установлена.
Вот код:
it('should generate correct email', () => {
const recipientEmail: string = 'some@email.com';
const extractedUrl:string = '';
// ....scenario generating a email to 'some@email.com'.....
cy.task('readMail', recipientEmail) // plugin logs "https://some.url.com" after a few seconds
.then((result:any) => {
extractedUrl= result;
console.log(result); // logs "https://some.url.com" in the terminal
cy.log("1:" + extractedUrl); // logs "1:https://some.url.com" in cypress UI
});
cy.log("2:"+ extractedUrl); // logs "2:" in cypress UI
console.log(extractedUrl); // logs nothing
cy.visit(extractedUrl);
});
Я, вероятно, что-то упускаю из-за того, как кипарис обрабатывает asyn c ... Я пробовал несколько разных вещей: cy.wrap
и cypress-wait-until
плагин, но не мог найти способ заставить эти работы.
На самом деле я нашел один способ объявить extractedUrl
вне теста и начать новый тест it('...', () => {...})
: тогда extractedUrl
на самом деле имеет правильное значение в начале следующего теста, но это не идеален и я хочу понять почему. Спасибо за вашу помощь!