Никита 🐸 Козлов Profile picture
Jun 4, 2022 38 tweets 11 min read Read on X
💅 Как делать тестовые задания по фронту

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

Лайк, ретвит, погнали 👇
Огромное спасибо @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 Никита 🐸 Козлов

Никита 🐸 Козлов 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

Apr 9
Давайте вместе разбираться, что там случилось с редисом, откуда вся драма 👇 Image
Началось с того, что редис сменил лицензию с открытой на сильно более закрытую.

Вот сам анонс, но там в основном корпоративный буллшит про то как они за все хорошее, а особенно за хорошую прибыль 😎 👌

redis.io/blog/redis-ado…
Почитать про оригинальную лицензию можно тут, коротко и понятно

opensource.org/license/bsd-3-…
Read 13 tweets
Sep 19, 2023
Наткнулся тут на обсуждения незаблокированных ноутбуков в офисе. Кто-то говорит, что это база и всем очевидно зачем их нужно блокировать, а кто-то говорит, что это ибшники опять кукухой поехали 🤔

Давайте попробуем разобраться 👇 Image
Начнем с того, что если кому-то интересно атаковать компанию, где вы работаете, то им в целом не так уж и важно какой именно доступ они получат. Круто конечно сразу получить доступ к компьютеру ЦТО или СЕО, но аккаунт секретарши на ресепшене тоже подойдет.
Во-первых, даже у самых рядовых сотрудников компании, скорее всего, будет доступ во внутреннюю сеть, а соответственно к большинству внутренних ресурсов. Можно попробовать атаковать их, а внутренние сервисы обычно на порядки хуже защищены (кто атаковать то их будет!?).
Read 20 tweets
Jun 4, 2023
Здравствуйте, меня зовут Никита и я уже 4 года живу без уведомлений.

*аплодисменты*

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

Почему же это может быть полезно ⬇️
Начнем опять же с очевидного утверждения, чтобы доделать задачу, нужно ее делать. При этом, чем больше фокус на задаче, тем быстрее вы ее сделаете.

Писать статью VS писать статью + смотреть ютуб + планировать встречу с друзьями.
Концентрация тем важнее, чем сложнее/новее для вас задача.

Вот собрались вы с силами наконец разобраться как устроена архитектура вашего сервиса на работе, читаете код, читаете доки, примерно построили граф кто, как и с кем общается. Image
Read 17 tweets
May 28, 2023
Попробовал несколько инструментов для того, чтобы рисовать на айпаде, а использовать на маке ⬇️
✍️ Встроенный Freeform

👍 Можно одновременно редактировать на айпаде и маке
👍 Достаточно инструментов (рисование, картинки, ссылки)

👎 Нельзя задать фон -> экспорт только прозрачный, что ломает твиттер
✍️ Procreate

👍 Все возможные инструменты

👎 Все возможные инструменты (ну слишком уж много)
👎 Частичный экспорт не работает
👎 Нельзя разом открыть на маке
Read 7 tweets
May 28, 2023
⏱️ Как все успеть

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

Только наша проблема не в нехватке времени, а в нехватке энергии. Давайте разберемся, откуда ее брать ⬇️ Image
Обговорим достаточно очевидный факт, что, чтобы сделать любую задачу у нас должно быть, как минимум, достаточно на это энергии.

Сложно писать статью или идти в зал, когда тело исчерпало уже все ресурсы и пытается отправиться поспать или поесть. ⬇️
Распределение сил на день может сильно зависеть от привычек и личных характеристик. Кто-то лучше работает утром, кто-то днем, а кто-то ночью.

Для упрощения, дальше будем рассматривать день с точки зрения жаворонка ⬇️ Image
Read 20 tweets
Feb 6, 2023
Продолжим про регулярные выражения ✍️

Про синтаксис можно почитать в предыдущей части, а теперь поговорим про плюсы, минусы подводные камни 👇

Прошлый раз мы написали регулярное выражение, для валидации телефона с примером +7-(999)-123-45-67

/^\+\d-\(\d\d\d\)\-\d\d\d-\d\d-\d\d$/
Пример удовлетворяет нашему регулярному выражению, но там есть как минимум 2 проблемы.

1 - телефон может прийти в другом формате.
2 - код страны поддерживает только 1 цифру.
2.1 - код страны не поддерживает "локальные" форматы, например через 0 для Турции.
Read 16 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!

:(