Nikita Kozlov Profile picture
Jun 4 38 tweets 11 min read
💅 Как делать тестовые задания по фронту

На примере разберем типичные ошибки и бест практисес

Лайк, ретвит, погнали 👇
Огромное спасибо @aileen_kingsler, что разрешила его разобрать 🙏

🌐 Опубликуйте приложение

Облегчите жизнь проверяющих, не заставляйте их ставить все пакеты и разбираться как запустить приложение локально.

Выложить фронтенд приложение сейчас можно бесплатно и за пару минут, например через netlify.com
Ссылки лучше всего добавить либо в ридми, либо в описание проекта справа.

p.s.: нашел, что тестовое из примера выложено, только когда перечитал оригинальный пост, лучше продублировать на гитхаб. Image
⛔️ Обрабатывайте ошибки

Если используете внешнее апи, то обработайте возможные ошибки.

❌ Не обрабатывать ошибки
✅ Ловить ошибки и показывать заглушку
❤️ Ловить ошибки и показывать правильное сообщение Image
Вот еще пример, если авторизация не сработала, нужно переслать пользователя на экран загрузки.

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

Можно попробовать добавить тесты, но иногда это может быть и лишним. Image
😓 Минимизируйте действия проверяющего

Тестирование на простой пароль - это хорошо, но придумывать что-то хитрое или использовать менеджер паролей для тестового сайта не особо хочется.

Если можно, лучше не добавлять такие проверки, а добавить комментарий в код 👇 Image
✍️ Заполните README

Идеально сделать даже простое тестовое задание, скорее всего, не получится. Покрыть все тестами, обмазаться доступностью, обработать все краевые случаи может занять недели.

Лучше напишите интро к проекту - что работает полностью, что нет, что нужно сделать. Image
📱 Адаптивность

Зависит от условий тестового и интро, но, скорее всего, проверяющий посмотрит как сайт работает на мобильном.

Например, здесь не особо удобно, что нельзя двигать борду используя большую часть экрана, только верхушку. Image
📖 Закопайтесь в UX

Хоть и использование стандартных контролов браузера - это хорошая практика, но я никогда не видел доски, которые работают так же 🤷

Посмотрите как работают похожие приложения и постарайтесь скопировать пользовательский опыт. Image
Компоненты не должны "мигать" и "прыгать", я примерно понимаю зачем так сделано, но опять же, ни одна доска которыми я пользовался до этого не делает так. Обновление данных всегда скрыто от пользователя тем или иным способом. ImageImage
Обычно досками пользуются дольше чем 2 минуты, что произойдет если пользователи создадут "много" тудушек? Опять же, например, ноушен позволяет за раз загрузить только 25 или 50 строчек, остальное по клику на кнопку. Image
🏃 Показывайте статус загрузки

Приложение может быть использовано при медленном интернете. В этом случае тоже нужно как-то показывать прогресс.

❌ Не показывать загрузчик
✅ Показывать загрузчик на всю страницу
❤️ Показывать загрузчик или скелетон по компонентам Image
🛠 Линтеры/сканеры/бест практисес

Проверьте приложения на какие-то базовые ошибки например с помощью линтеров (eslint-plugin-react), Chrome Lighthouse, WebStorm issues. Image
Такс, пока разобрали само приложение, через часик закопаемся в код 🔎
Погнали в код 👇
🧙‍♀️ Используйте тайпскрипт

Кажется, что большинство компаний используют тайпскрипт так или иначе, так что тестовое на нем точно будет плюсом, если не указано обратное.

При этом, если вы его не знаете, то это не должно вас останавливать от решения. Image
🔧 Настройте линтеры

Зависит от объема работ и от того есть ли у вас какой-нибудь личный шаблон приложения, но использование форматтеров и линтеров (prettier, eslint, styleling, ...) тоже точно будет плюсом.
🤖 Напишите базовые тесты

Тесты бывают разные - синие, белые, красные...

А если серьезно, то любой тип тестов будет большим плюсом. Они кстати бывают разных типов 🙃 Но это, наверн, тема для отдельного треда. Image
😵 React / ErrorBoundary

Если где-то будет ошибка, неплохо бы её обработать, что приложение не упало

reactjs.org/docs/error-bou…
😴 Ленивая загрузка

В большом приложении слишком много страниц и разных компонент, чтобы загружать их разом. Чтобы сократить время загрузки есть такая штука как ленивая загрузка aka код сплитинг.

Это валидно и для реакта и для ангуляра.

reactjs.org/docs/code-spli…
📦 Переиспользование логики

Логику можно и нужно переиспользовать как и компоненты. Делать проверку аутентифицирован ли пользователь в каждом компоненте - это лишнее.

Можно либо вынести это внутрь App, либо как-то переиспользовать роуты (нужно гуглануть guarded routes). Image
🥊 Производительность

Для оптимизации реакта важно использовать правильные хуки и мемоизацию 🤓

У ангуляра же нужно правильно использовать так называемый ChangeDetection

reactjs.org/docs/react-api…
reactjs.org/docs/hooks-ref… Image
Вот такой вот вызов ломает отслеживание изменений реакта и каждый раз пересоздает все компоненты, вместо их обновления. Image
🚇 Правильное использование rxjs

Раз уж речь зашла про англуяр, там критически важно научиться работать с rxjs.

Не будем погружаться в детали, но вот такой код в ангуляре - это почти всегда очень плохо. Image
💅 Sass/scss/StyledComponents/...

Хорошей идеей будет использовать что-то отличное от чистого CSS, особенно хорошо если это используется в компании.

Отдельный плюс за медиа квери ✅ Image
👋 Общение с апи отдельно от кода

Такие запросы к апи никак не переиспользовать, плюс если что-то поменяется, то нужно бегать по всем компонентам и обновлять по всему проекту.

Лучше будет вынести все запросы в отдельный файлик. Image
Собственно общие советы как сделать тестовое и не умереть 👇
👨‍💼 Выясните все детали

Работа над тестовым - это как работа над задачей, иногда может быть нужным запросить дополнительные детали. Где взять дизайн? На него можно забить? Что наоборот важно? Что должно происходить в этом случае, а в этом, а в этом?
⏰ Поставьте ограничение по времени

Тестовые очень часто сильно размыты, так что на них можно умудриться потратить недели. Так что выделите себе 1-2 вечера, сделайте самое важное, а остальное напишите в README или сопроводительном письме.

> Потратил все время на логику и не успел тесты, если было бы время добавил бы Cypress

> Обработку ошибок сделал на скорую руку, рабочий вариант можно посмотреть вот тут...

> Договорились, что дизайн не особо важен, так что использовал библиотеку компонент bootstrap

...
🐑 Заведите себе базовый проект

Чтобы на каждое тестовое не тратить время, либо переиспользуйте код из старых тестовых, либо заведите себе какую-то базу, где уже стоят все линтеры, настроены базовые тесты, работает аутентификация и тд
🥷 Подсмотрите готовые тестовые

Вариант 1, найдите гитхаб компании, пройдитесь по сотрудникам, у кого-то из них точно будет открытое тестовое 🙃

Вариант 2, поищите на гитхабе название компании и откройте список репозиториев, соискатели часто называют их company-test-assignment
Не стоит копировать эти решения, но как минимум, имеет смысл посмотреть, что делали другие люди, особенно если это текущие сотрудники компании.
Кажется это все, но главное - найдите баланс между функциональностью и временем. Готовое тестовое - еще не гарант работы, так что имеет смысл переиспользовать/выяснить детали/срезать углы.

Какие остались вопросы? Буду рад ответить 🙏
Много людей написало, что тестовые довольно болезненно и долго делать, так что написал тред про то как к ним подходить со стороны компании

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Nikita Kozlov

Nikita Kozlov Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @kozlovzxc

Jun 6
🔥🔥🔥Мини-тред клипов c охуенным визуалом и музыкой 🔥🔥🔥

Тут приехал @skvoter и показал столько жары вышло. Я как дед пропустил до какого уровня поднялся продакшен, так что деды, собираемся 🤝

Сегодня никаких лайков, ретвитов, врум-врум, берите чай/пиво/винище и кайфуйте 👇
Вы только посмотрите на этот визуал

Посмотрите на эти цвета и движения

Read 12 tweets
Jun 5
Давайте теперь разберемся как составить такое тестовое задание, чтобы его было комфортно решать кандидатам 😊

Лайк, ретвит, погнали 👇
🎯 Определитесь зачем нужно тестовое

Тестовые задания обычно занимают кучу времени и не все кандидаты хотят или могут их решать.

Главный вопрос на который нужно ответить - зачем нужно тестовое задание?

Сразу после этого - можно ли это как-то проверить без тестового?
Хотите посмотреть какими инструментами человек пользуется для работы? Спросите это на техническом интервью.

> Если тебе нужно создать базовый проект, где дальше фичи будет пилить целая команда, какие инструменты ты бы использовал и для чего?
Read 24 tweets
May 9
Тред-члелендж!

Рассказываем с @M0rtyMerr как развиваться после того как первый оффер в кармане 💰

Если мой тред наберет больше лайков+ретвитов завтра к 8, то Антон купит мне айфон* 💅

Лайк + ретвит, погнали

* если меньше, то я ему 😥
🚪 «Если вы самый умный человек в комнате, то вы не в той комнате, где должны находиться»

Конечно приятно, когда вы все знаете и все к вам ходят за советом, но так вы останавливаетесь в развитии.

Работать нужно в той команде, где есть люди у которых вы можете чему-то научиться.
🐸 Одна тема за один присест.

У человека есть встроенная боязнь пропустить что-то важное, так что вам будет хотеться разобраться во всем и сразу. Алгоритмы, базы данных, тестирование и тд.

Обычно это заканчивается тем, что по-хорошему ни в чем разобраться не получается.
Read 34 tweets
Apr 29
«Как стать Эллиотом из Мистера Робота» или «Как вкатиться в безопасность веба».

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

Лайки, ретвиты, поехали 🤖
Начать рекомендую с книжки Tangled Web, в очень легком формате познакомитесь с историей веба и технологий, познакомитесь с самыми частыми уязвимостями, разберетесь что и как работает.

10% истории, 30% уязвимости, 60% как что работает.

amazon.com/Tangled-Web-Se…
Параллельно с прохождением всяких курсов можно читать The Web Application Hacker's Handbook. По хардкору разберете многие уязвимости с примерами.

Читал книгу в самом начале, чтобы погрузиться в тему, а сейчас вот вдумчиво перечитываю для работы.

amazon.com/Web-Applicatio…
Read 23 tweets
Apr 27
😊 Признаков хороших компаний тред 😊

Антон написал классный тред про красные флажки, а теперь давайте попробуем разобраться про зеленые.

Лайки, ретвиты 🙏

✅ Компания работает в интересной вам сфере.

Многие минусы можно пережить, если вы искренне верите в продукт. Любите помогать людям? Компания, которая ищет потерявшихся в лесу людей с помощью дронов, будет лучшим выбором чем онлайн казино. Image
✅ Вакансия написана человеческим языком.

Классно, когда общение начинается на равных, без "Вы" и тонны прилагательных про проект и команду.

Скорее всего, в такой компании все процессы понятны и ориентированы, в первую очередь, на человека. Image
Read 15 tweets
Apr 18
Прошлый раз мне накидали столько резюме на ревью, что я их еще не все и закончил 🥲

Многие вещи повторяются вновь и вновь, так что проведем парочку публичных разборов, с согласия отправителя конечно.

Если что-то показалось полезно, принимаю лайки и ретвиты 👇
Это экспорт из hh, лучше делайте резюме сами на каком-нибудь генераторе. Тут куча ненужной информации, которую нельзя убрать, плюс довольно посредственное форматирование.

Делайте резюме сразу на английском, даже если подаетесь в русскоговорящие компании. Во-первых, бывают русскоговорящие команды в зарубежных сервисах, во-вторых, если вас внезапно позовёт товарищ на сладкую удаленку, у вас уже все готово.
Read 19 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


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

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

Become Premium

Don't want to be a Premium member but still want to support us?

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

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(