, 11 tweets, 4 min read Read on Twitter
Ладно, вернемся к е2е тестам. И немного о том, чем собственно занимаюсь я.

@CodeceptJS начался в 2015 году с 3х идей:

💡 чтоб тесты писались одинаково для Protractor & WebDriver

💡 чтоб не делать цепочки промисов

💡 чтоб тесты было легко читать.

Примерно так:
@CodeceptJS Если убрать ручной контроль браузера, а сфокусироваться на тестовом сценарии мы:

👍 получаем более читабельный код,
👍 можем легко переключаться между движками
👍 ставим защиту от дурака и говнокода (да, она работает!)
Сейчас философия проекта следующая: мы делаем всё что нужно для е2е тестов, а управление браузером делегируем другим библиотекам: puppeteer, webdriverio, etc.

Не переизобретая браузер, мы фокусируемся на проблемах, которые возникают в тестах. И решаем их. Многие уже решили.
Например, у нас есть крутая интерактивная пауза. 💥

Тест можно вообще не писать. А просто открыть браузер, начать вбивать в него команды. А затем открыть файлик с успешно выполненными командами, скопировать их в код - и всё!

Тест готов! 🔥
И да, вы можете искать элементы по тексту и по семантике. Хотя CSS/XPath поддерживаются везде, тесты становятся гораздо проще, когда они выглядят как:

I.click('Login');
I.fillField('Username', 'davert');
I.checkOption('agree')

Просто пользуясь семантикой веба.
Насчет промисов. У нас комбинированный подход: control-flow + async await. Мы требуем await только там где нужно остановить исполнение и получить данные из браузера.

Читабельно и не нужно ломать мозг - а вот это было синхронно или асинхронно. Есть четкие правила.
Кроме браузера нам нужно работать с данными. Можно написать правила создания данных, подключить REST или GraphQL. А потом в коде просто писать:

const post = await I.have('post')
I.haveMultiple('comment', 3);

Через API мы создадим, а в конце теста удалим нужные данные.
Тесты можно гонять параллельно через воркеры, работает всё быстро, если через Puppeteer.

Возможно, у нас ещё нет такого красивого веб-интерфейса, как у Cypress, но мы работаем над ним 🐼
Как мы боремся с flaky тестами.

Тоже комбинированный подход.

⭐ Явные ожидания: waitForElement, waitForText
⭐ Явный retry конкретного шага: I.retry(3).click()
⭐ И для ленивых: retryFailedStep (не всем нужно, но работает. Просто перезапускает последний упавший шаг)
Проект mature, используется в крупных компаниях. Они любят то, что можно всем дать один фреймворк, а на чем тесты гонять - WebDriver, Puppeteer или TestCafe - это уже решают команды. В зависимости от потребностей проекта.

Легко людей обучать и перебрасывать между проектами.
За @CodeceptJS не стоит ни одна крупная компания, миллионных инвестиций мы тоже не получали. А потому вы скорее всего о CodeceptJS ничего не слышали 🙄

Но мы постоянно делаем проект круче. В JavaScript экосистеме ещё столько крутых штук, идей и хочется реализовать их все! 🤠
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to jsunderhood
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!