Я думаю, что Cypress сбрасывает второй тест при обнаружении нового домена, см. Этот комментарий Изменение baseUrl во время теста
Cypress меняет родительский домен в соответствии с baseUrl, во избежание проблем с навигацией по сайту, который не соответствует родительскому домену. Продукт Cypress просто не кодируется, чтобы справиться с изменением середины теста baseUrl.
Чтобы проверить это, этот простой тест отражает то, что происходит
describe('changing domains', () => {
it('goes to example.com', () => {
cy.visit('http://example.com')
})
it('changes to example.net', () => {
cy.wait(10000)
cy.visit('http://example.net')
})
})
Есть несколько способов (потенциально) избежать этой проблемы, но не уверен, что любой из них будет работать для вас.
- Go для нового домена в начале второго теста с фиктивным вызовом,
describe('changing domains', () => {
it('goes to example.com', () => {
cy.visit('http://example.com')
})
it('changes to example.net', () => {
cy.visit('http://example.net')
cy.wait(10000)
cy.visit('http://example.net')
})
})
Подождите в первом тесте,
describe('changing domains', () => {
it('goes to example.com', () => {
cy.visit('http://example.com')
cy.wait(10000)
})
it('changes to example.net', () => {
cy.visit('http://example.net')
})
})
Идеальным решением было бы исключить сервер FakeSMTP из теста и перехватить отправленную почту таким же образом, как и сообщения XHR пойманный в ловушку и заглушенный cy.route()
, тогда вам не придется ждать 10 секунд, но я не вижу примеров, поэтому предположим, что это пока невозможно. Возможно, это произойдет, когда придут собственные события.
Я посмотрел этот пост Тестирование рабочего процесса электронной почты от конца до конца с помощью Cypress , который создает пользовательскую команду для опроса сервер, пока электронная почта не включается, используя рекурсию. По сути, он действует как повторение команды cypress, поэтому вы не ждете произвольное время (как говорит @Jboucly, его следует избегать), но ждете с шагом 300 мс, пока не придет электронное письмо.
Cypress.Commands.add('getLastEmail', email => {
function requestEmail() {
return cy
.request({
method: 'GET',
url: 'http://localhost:4003/last-email',
headers: {
'content-type': 'application/json',
},
qs: {
email,
},
json: true,
})
.then(({ body }) => {
if (body) {
return body;
}
// If body is null, it means that no email was fetched for this address.
// We call requestEmail recursively until an email is fetched.
// We also wait for 300ms between each call to avoid spamming our server with requests
cy.wait(300);
return requestEmail();
});
}
return requestEmail();
});
Это действительно должно иметь предел глубины рекурсии, в случае, если все не go, как ожидалось, и электронное письмо не приходит.