Разделы портала

Онлайн-тренинги

.
Советы по Cypress, часть 2: тестирование потоков email с Mailosaur
03.02.2020 00:00

Автор: Филип Рик (Pilip Hric)
Оригинал статьи
Перевод: Ольга Алифанова

Часть 1

"Чем больше тесты похожи на то, как реально используется ваше ПО, тем больше уверенности они вам дают". Кент С. Доддс.

Во второй части советов про Cypress я хочу рассказать вам о том, как мы используем Cypress с инструментом Mailosaur.

Создавая тесты, я хочу, чтобы они были максимально похожими на реальное пользовательское поведение – иными словами, я рассказываю историю целиком.

Приведу пример. Допустим, вы забыли пароль к вашей учетной записи Slido. Вот что вы сделаете как пользователь:

  1. Перейдете на страницу сброса учетных данных и запросите сброс пароля.
  2. Получите письмо со ссылкой сброса.
  3. Перейдете по ссылке.
  4. Введете новый пароль.
  5. Авторизуетесь с новым паролем.

При помощи Cypress можно легко выполнить первый шаг. Однако переход к третьему шагу требует открытия почты, а это не то, что можно легко сделать в тесте (а может, вы и не хотите это делать).

В норме этот вопрос решается стейдж-окружением и созданием особых настроек, позволяющих добыть нужную информацию. Но это не то, что делает пользователь, это на него не похоже. Вы, конечно, убедитесь, что все части функциональности работают (и это хорошо), но если вы похожи на меня – вы будете чувствовать, что этого недостаточно.

Приветствуем: Mailosaur

Mailosaur – это сервис, создающий папку входящей почты. Выделяется он тем, что доступ к нему можно получить не только через интерфейс, но и через API. Все содержимое письма и его метаданных может быть получено как чистый текст, HTML, или JSON, и вы можете просмотреть все сссылки, вложения и изображения.

Больше всего мне нравится возможность подождать прибытия определенного письма. Это означает, что вы можете получить доступ ко всей информации за несколько миллисекунд, а затем использовать ее в тесте.

При помощи Mailosaur вы создаете емейл-сервер, куда приходят все письма с определенным именем пользователя. Получится что-то вроде этого:

{{любой текст}} Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

Интеграция Mailosaur с Cypress

Так ак вы можете получить нужную информацию путем простого HTTP-запроса, то это вы и сделаете – используя команду Cypress cy.request(). Затем можно создать тесты для возвращенного ответа, или же использовать эти данные для дальнейших тестов.

Пример теста с Mailosaur:

const userEmail = '
 Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
 '
 
describe('Reset password flow', () => {
 
it('Should receive an email and use reset password link', () => {
 
// trigger reset password for user
// this command is equal to clicking „I forgot my password“ link and entering user email
cy
.userPasswordReset(userEmail)
 
cy
.request({
method: 'POST',
url: 'https://mailosaur.com/api/messages/await?server=abcdefg', // abcdefg is server name
headers: {
authorization: Cypress.env('mailosaurAuth')
},
body: {
'sentTo': userEmail,
'subject': 'Password reset'
}
}).then( response => {
 
// continue with test, open link
cy
.visit(response.body.text.links[1])
 
// fill in and confirm new password
cy
.get('#password')
.type(newPassword);
 
cy
.get('#passwordConfirm')
.type(newPassword);
 
cy
.get('#reset-change-password-btn')
.should('be.visible')
.should('be.enabled')
.click();
 
// land on desired page after confirming password reset
cy
.location('href')
.should('contains', '/login');
 
// login with my new password
// ...
 
})
 
});
 
});

После получения ссылки сброса пароля вы можете продолжать свои тесты – открыть ссылку, задать новый пароль и авторизоваться с ним. Это больше похоже на реальное поведение пользователя, и все шаги будут связными и последовательными.

Обсудить в форуме