Тестирование React приложения

Поділитися
Вставка
  • Опубліковано 23 чер 2021
  • Как писать тесты для React приложений и какие виды тестов бывают, как начать писать первые тесты и повысить надежность своих компонентов. Разбираем React Testing Library, который доступен из коробки при использовании утилиты create-react-app.
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    / mishanep
    www.tinkoff.ru/rm/nepomnyasch...
    paypal.me/mishanep

КОМЕНТАРІ • 78

  • @antonchudinov2057
    @antonchudinov2057 4 дні тому +1

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

  • @whhhhitee
    @whhhhitee 2 роки тому +30

    Очень крутая дикция и манера подачи

  • @johnjohhoun1716
    @johnjohhoun1716 Рік тому +16

    07:00 запуск тестов
    10:50 директивы test, it, describe
    14:00 директивы expect, toBeInTheDocument
    16:00 getByRole, queryByRole
    19:20 snapshot
    30:00 muck function
    32:51 screen.debug()
    34:40 placeholder for input
    36:20 fireEvent, userEvent
    38:00 userEvent.type() - check onChange function with help of jest.fn() mock function
    39:40 библиотека classnames
    46:50 test CSS classes
    49:16 метод toHaveStyle - toHaveStyle работает в том случае, если ты передашь стили (display: flex) через атрибут style, иначе это просто стили с класса
    51:00 tests and commit - options a and --watchAll
    52:50 useEffect, динамическая проверка

  • @aaronvasilev2371
    @aaronvasilev2371 2 роки тому +2

    Михаил, это видео - именно то что было необходимо мне прямо сейчас. Посмотрю его как только будет свободное время. Огромное Вам спасибо!

  • @serjdenisov2114
    @serjdenisov2114 2 роки тому +15

    Михаил, классно объясняете - спокойно, хорошо, понятно. Спасибо большое!!!!!

  • @artemkhegay616
    @artemkhegay616 2 роки тому +5

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

  • @zakharkibanov8929
    @zakharkibanov8929 2 роки тому +1

    Как же вовремя!) Спасибо огромное. Типа подписался несколько месяцев назад из-за одного видео, даже вспомнить не могу - какого, а тут просто то, что нужно в отличном виде. Вот так удача))) Очень большое спасибо!

  • @alex45779
    @alex45779 2 роки тому

    ОГРОМНОЕ СПАСИБО!! Преподавание ведете легко и свобоно! Сразу чувствуется, что полностью в теме!

  • @igortrifonov9339
    @igortrifonov9339 2 роки тому +1

    Спасибо большое за видео, очень приятно слушать Вас, понятно объясняете!

  • @sergeyplotnikov5031
    @sergeyplotnikov5031 Рік тому

    Большое спасибо за подробное объяснение с отличными примерами!

  • @andreyyastrebtsov4367
    @andreyyastrebtsov4367 2 роки тому

    Отличное видео, большое спасибо!!! Очень чётко, понятно и просто! Примеры супер!

  • @jses8560
    @jses8560 2 роки тому

    Спасибо за видео по тестам в React!

  • @user-tz6ug2eo8j
    @user-tz6ug2eo8j 8 місяців тому

    Спасибо вам, очень информативно и без воды

  • @vadimniziev5489
    @vadimniziev5489 2 роки тому

    Спасибо большое, отличное видео! Как раз то, что нужно!

  • @alexstepanchhuk683
    @alexstepanchhuk683 2 роки тому

    Замечательное объяснение! Спасибо!

  • @user-sd9je7ov8o
    @user-sd9je7ov8o 2 роки тому

    Спасибо за материал. Для старта самое оно!

  • @evgeniyn1542
    @evgeniyn1542 2 роки тому

    Тесты это круто, спасибо за видео! :)

  • @mikhailmikhailovich1037
    @mikhailmikhailovich1037 Рік тому

    Очень качественное видео про тестирование React приложения. Спасибо.

  • @anazkomult
    @anazkomult 2 роки тому

    Михаил, спасибо! Отличное видео! Надеюсь на продолжения темы тестирования! 8-)

  • @serg1221
    @serg1221 2 роки тому

    Немного по полочкам в голове расставили, спасибо большое

  • @SeganMert
    @SeganMert 2 роки тому +4

    Ух, информативно и по пунктикам, как раз как надо) все за час разложил, даже css задел)
    Не помешало бы конечно еще задеть API тесты, но было круто)

  • @egorpobylets6597
    @egorpobylets6597 2 роки тому

    Спасибо! Отличный материал

  • @Oksan4ik1
    @Oksan4ik1 9 місяців тому

    Спасибо вас огромное) Изучаю Реакт сейчас, поняла без усилий и пересмотров!)

  • @_GreenSnake_
    @_GreenSnake_ Рік тому

    Спасибо за Ваш труд

  • @pauldudich
    @pauldudich Рік тому +10

    Отличная подача, спасибо. Пару моментов:
    1. не dinamyc a dynamic, там еще были грамматические ошикби (советую установить плагин у vs code - Code Spell Checker)
    2. toHaveStyle работает в том случае, если ты передашь стили (display: flex) через атрибут style, иначе это просто стили с класса

  • @johnconnor9787
    @johnconnor9787 Рік тому +2

    30:00 muck function
    32:51 screen.debug()
    38:00 userEvent.type() - check onChange function with help of jest.fn() mock function
    46:50 test classes

  • @vladvoloshenko5701
    @vladvoloshenko5701 2 роки тому +1

    решил посмотреть чуть позже, смотрю уже 3 месяца прошло с моего прошлого комента, в общем начинаю смотреть, за контент спасибо)))

  • @user-gi9xk7jt1f
    @user-gi9xk7jt1f 2 роки тому +2

    Такой добрый осенний голос)

  • @romanmelon5845
    @romanmelon5845 2 роки тому

    Дякую за відео, класні кейси покриті для початківців.
    дуже зрозуміло!

  • @user-fn2ud8ec3i
    @user-fn2ud8ec3i 11 місяців тому

    Отличное видео!

  • @HaveFun77777
    @HaveFun77777 2 роки тому

    Круто! Спасибо!))

  • @viktormoskalev2269
    @viktormoskalev2269 2 роки тому

    Крутая подача, странно что так мало подписчиков

  • @ondrui
    @ondrui 2 роки тому

    Михаил, спасибо большое за уроки! У меня такой вопрос к вам - как подключить в VS code автокомплит методов jest?

  • @ValentinProtasevich
    @ValentinProtasevich 9 місяців тому

    большое спасибо!

  • @vanunsakanyan2188
    @vanunsakanyan2188 Рік тому

    круто, спасибо

  • @the.gist.
    @the.gist. 2 роки тому

    Спасибо!

  • @Churchkhelass
    @Churchkhelass Рік тому

    Спасибо братишка что все так четко объяснил!

  • @lirrr6555
    @lirrr6555 Рік тому +12

    Спасибо за видео. Главный вопрос - как понять какие тесты действительно нужно писать, а какие нет? потому что кажется, что можно придумать под 100 тестов на каждую мелочь и увеличить время разработки в 5 раз, не получив сопоставимой пользы.

    • @user-zp9iq1po5o
      @user-zp9iq1po5o Рік тому +4

      Думаю, что нужно воспринимать тесты как документирование модулей и компонентов, когда опишешь всё закладываемое поведение - тогда пора и завязывать

  • @emil7881
    @emil7881 6 місяців тому +1

    ни у кого не появлялась ошибка Warning: An update to App inside a test was not wrapped in act(...) в интеграционных тестах? не пойму как решить
    p.s. оборачиваю в act. но начинает ругаться ESLint: Avoid wrapping Testing Library util calls in `act`(testing-library/no-unnecessary-act)

  • @mariashabalina6299
    @mariashabalina6299 Рік тому

    Подскажите, пожалуйста, насчет всех видов тестирования. Нужно ли в одном проекте использовать юнит-тестирование, интеграционное и end2end тестирование? Или ты выбираешь какой вариант тебе ближе и тот постоянно используешь?

    • @mishanep
      @mishanep  Рік тому

      Зависит от требований заказчика. Потому как он и оплачивает время на создание тестов. Это дорого. Юнит тесты - самые дешевые, end2end - самые дорогие. В идеале, чтобы были все виды тестов.

  • @VorobyevAlexander
    @VorobyevAlexander 2 роки тому +3

    Спасибо за видео. Ряд вопросов:
    1. Можно ли конфигурировать определенный тест так, что если он проваливается - прерывается все тестирование
    2. Если разрабатывать через тестирование. Можно ли тесты помечать типа "функционал не реализован". Т.е. красным отображается в статистике, но сам тест не выполняется.
    3. Возможно ли доработать тест динамического тестирования класса в Search. Т.е в рамках одного теста изначально поле ввода пустое - проверяем отсутствие класса filled. Потом userEvent.type() - проверяем появление этого класса. Сам попробовал не получилось - как я понимаю потому что нужно подсунуть стейт... но тест валится и не дает использовать useState.

    • @mishanep
      @mishanep  2 роки тому +1

      По первым двум вопросам не подскажу, у меня нет ответа.
      По второму - стейт подсовывать не надо. Пользовательское действие через userEvent уже должно сымитировать изменение стейта, а значит уже можно проверять на предмет того, случилось ли изменение или нет. Можно в один тест это положить и последовательно в одном it утверждении сначала проверить наличие класса при пустом поле, а потом выполнить userEvent и посмотреть что стало в наборе классов.

  • @user-rg9ps9is3o
    @user-rg9ps9is3o 2 роки тому

    Интересно, а какую то отдельную ошибку можно игнорировать в Jest? Нашел, как отдельные папки в игнор добавлять, а как конкретное правило игнорить...

  • @moloko6469
    @moloko6469 Рік тому

    а может быть метод toHaveStyle() проверяет наличие атрибута style у элемента, ну по типу ??
    это предположение))

  • @vladislavfedorov6537
    @vladislavfedorov6537 2 роки тому +2

    Хорошее видео, но на мой взгляд с тестом стилей тут что-то не то, тестирование по classNames противоречит философии тестирования, тесты должны рассматривать проект с точки зрения пользователя, а пользователю не важно есть ли className с определенным именем на определенном элементе, classNames могу поменяться/перетасоваться так что UI останется прежним, а тесты упадут. По идее правильно было бы смотреть на конкретные стили, изменился ли backgroundColor после какого-либо действия и тд, но react-testing-library при своей эмуляции не создает дом и стилей уэтих элементов не посмотреть(

  • @ksenyaD
    @ksenyaD 9 місяців тому

    Топ👍🏻

  • @repetonline8065
    @repetonline8065 8 місяців тому

    Не работает почему-то тест самый последний с фильтрацией, в консоли говорится, что нужно использовать обёртку act()

  • @HaveFun77777
    @HaveFun77777 2 роки тому

    Еще интересно как работать с редаксом в тестах. И скажите, пожалуйста. Зачем нужны такие простые тесты, если я во время разработки сам вижу, что выводится на страницу, а что нет?

    • @mishanep
      @mishanep  2 роки тому +8

      Разработка - штука итеративная. Когда вносишь доработки или делаешь рефакторинг, не сложно что то сломать. Удержать в голове все нюансы функционала каждого компонента и их взаимодействия не так то просто, а тесты снимают этот вопрос. Одной командой мы узнаем, если что-то пошло не так. Ну и TDD - это когда мы сначала описываем тест-кейсы, того как должен вести себя компонент, а потом только берёмся за реализацию. Если не говорить про стили, то базовый функционал можно закрыть, даже не запуская сборку.

  • @KirillKolchanov
    @KirillKolchanov Рік тому

    не знал про либу classnames - понравилась))

  • @storozhukua
    @storozhukua 2 роки тому

    Дякую.

  • @kirillzarya5229
    @kirillzarya5229 2 роки тому

    Подскажите , как эти тесты работают если в приложении задействован redux?

    • @mishanep
      @mishanep  2 роки тому

      Да нормально работают. Просто надо учитывать особенности редакса и имитировать стор с провайдером вокруг компонента.

  • @koshgosh3081
    @koshgosh3081 Рік тому

    возможно прослушал, а что означает значает / / эти штуки и значек i после них?

    • @mishanep
      @mishanep  Рік тому

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

  • @HaveFun77777
    @HaveFun77777 2 роки тому

    Было бы здорово если вы расскажите про то как работать с ошибками в React.

    • @mishanep
      @mishanep  2 роки тому

      Речь про стадию разработки или про стадию production?

    • @HaveFun77777
      @HaveFun77777 2 роки тому

      @@mishanep Про Boundary

    • @sergeys4732
      @sergeys4732 2 роки тому

      @@HaveFun77777 а что там рассказывать , оборачиваешь в hoc и все. В документации эта тема хорошо раскрыта )

  • @user-kt8fu6bn9f
    @user-kt8fu6bn9f 2 роки тому

    АААААААА белая тема в вскоде 😲😲😲😲

  • @leoibra6296
    @leoibra6296 Рік тому

    использую в своем проекте, но получаю ошибку на использование jest.fn(). пишет что jest is not defined. установил отдельный пакет jest globals, получил следующую ошибку Do not import `@jest/globals` outside of the Jest test environment. как можно решить данную проблему?

    • @mishanep
      @mishanep  Рік тому

      Вероятно у вас используется другой вариант сборки и вам нужно ручками настроить setupTests.js

    • @leoibra6296
      @leoibra6296 Рік тому

      @@mishanep оказалось что проблема в настройках проекта, создав новый проект с базовыми настройками проверил все и работает как нужно) еще такой вопрос, у меня в компоненте есть элемент при наведении на которого (onMouseEnter) срабатывает функция, как можно протестировать этот момент?

  • @andranikgrigoryan6765
    @andranikgrigoryan6765 2 роки тому

  • @sviatbondar1721
    @sviatbondar1721 10 місяців тому

    Если у кого самый последний тест кейс не отрабатывает то это из за того что те места кода которые вызивают обновление стейта нужно оборачивать в act();
    test("search filter works", () => {
    render();
    expect(screen.getByText("react")).toBeInTheDocument();
    expect(screen.getByText("css")).toBeInTheDocument();
    act(() => {
    userEvent.type(screen.getByRole("textbox"), "script");
    });
    expect(screen.queryByText('css')).toBeNull();
    expect(screen.queryByText('java script')).toBeInTheDocument();
    });
    Вот так вот оно отработало без ошыбок, а то пару часов бился и не мог понять почему у автора все работает а у меня нет, но потом перезапустил проект и запустил тесты и мне насипалось кучу warning где как раз и советуется , те места которые вызивают обновление стейта нужно оборачивать в act();
    Спасибо автору за урок .

  • @Pink_Piglin
    @Pink_Piglin Рік тому

    Планируете записывать видео курс Jest Enzyme? На всем ютубе инфа размазана, приходится часами слушать неструктурированные, местами не понятные обучающие видеоролики. То-то дело Ваши!
    Я бы и на платной платформе купил ваш курс по этой теме, но нету, все полноценные курсы на английском только!

    • @mishanep
      @mishanep  Рік тому

      С Enzyme уже несколько лет не работал. Не знаю как там библиотека развивается. Вообще курс по тестированию рассматривается мною как один из возможных в качестве следующего проекта. Но не могу ничего обещать.

  • @mkonin
    @mkonin Рік тому

    Ну все, после этого видоса я точно готов жениться )

  • @iGotton
    @iGotton 2 роки тому

    +

  • @user-ct4qt9cg7l
    @user-ct4qt9cg7l 5 місяців тому +1

    Это одно русское видио в конце 2023 года !! Которое реально полезное и помогает понять как работают тесты с реактом и не только ! По больше бы реально полезных видео от @Mихаил Непомнящий .

  • @lavanda_funny
    @lavanda_funny Рік тому

    Добрые люди,подскажите начинающему AQA js где этот шаблон взять? Установила @testing-lib.../react и jest-dom но никаких файлов кроме node-modules и .json нету(((