Автоматизированные тесты / Пишем соцсеть на Ruby On Rails 6 #5
Вставка
- Опубліковано 20 тра 2024
- Это пятый эпизод, где мы пишем социальную сеть на Ruby On Rails версии 6. В этом видео мы пишем тесты для модели постов, а так же end-to-end тесты для интерфейса.
Коррекция: в этом видео я по инерции поместила файлы с end-to-end тестами в папку test/integration, как многие делали до появления SystemTestCase фреймворка, но вообще для них нужно создать подпапку test/system. Подробнее о фреймворке для системных тестов Rails 6 можно узнать из этого выступления (англ): • RailsConf 2017: Buildi...
Исходники: github.com/overeng/rubysocial
Таймкоды:
00:00 Зачем нужны автоматизированные тесты
01:40 Unit-тесты
03:05 Интеграционные тесты
04:23 End-to-end (blackbox) тесты
05:45 Как загружать тестовые данные в базу: fixtures и factories
07:42 Установка FactoryBot и разбор синтаксиса factory
10:30 Тесты модели Post
15:41 End-to-end тесты и фреймворк Capybara
Привет, меня зовут Ксения, и я бэкенд разработчица. У меня есть опыт разработки больших проектов на разных языках программирования: Ruby, C#, Java, Perl и Python. Сейчас я живу в Германии и работаю в Github. На своем канале я рассказываю про карьеру в IT, бэкенд программирование и жизнь за границей.
Привет, Ксения! Спасибо за видосы. У меня появился вопрос касаемо интеграционных и системных тестов:
В данном уроке ты пишешь интеграционные тесты в папке integration и наследуешь класс теста от ApplicationSystemTestCase, а не от ActionDispatch::IntegrationTest.
В документации rails от ApplicationSystemTestCase наследуются системные тесты. Не могла бы ты объяснить почему наследуешься именно от ApplicationSystemTestCase, а не от ActionDispatch::IntegrationTest? Спасибо
Привет! Наследуюсь от ApplicationSystemTestCase именно потому, что это системные (end-to-end) тесты, а насчет того, что они не должны лежать в папке integration ты абсолютно прав. System test case framework появился в Rails недавно, а до этого такие тесты (которые в браузере) часто помещали в папку integration, сейчас их нужно класть в папку system, и как-то это ускользнуло о моего внимания, спасибо за комментарий. Обновлю описание.
Ты классная, надеюсь ты из депрессии уже вылезла! Видео очень интересные, не тормози! 😘😍
Смотрю твои видео просто взахлёб! Очень конкретно, предметно, без каких-либо заумных высказываний! Просто супер.
спасибо за Ваш труд!
Только появился вопрос и сразу ответ 😂 лайк за оперативность
спасибо ! очень кстати оказалось видео !
Лайк.
Привет, Ксения! Подскажи, в какую базу сохраняются посты, созданные при запуске тестов capybara, и удаляются ли они автоматически ?
красотка
Я наверно пропустил, а с каким движком тут взаимодействует капибара? Я так понимаю можно юзать разные варианты: selenium, puppeteer или ещё что нибудь
не пропустили, я этого не касалась в видео. Да, там три драйвера можно выбрать - selenium, webkit и racktest
Небольшое дополнение:
Если вы пишите тесты, то стоит полагать, что все используемые библиотеки, фреймворки и прочий код от третьих лиц работает верно, и нам писать для него тесты не нужно. Если все-таки такие тесты приходится писать часто и много, то не стоит такой код от третьих лиц использовать, вы просто тратите свое время впустую.
Насчет тестов моделей:
В примере из видео получается, что тестируются сами валидаторы, а не модель. Т.е. проверяется, а действительно ли верно отработают валидаторы, если оставить одно поле пустым, а длина другого поля привысит лимит символов. Да! Они отработают! Валидаторы уже протестированы разработчиками Rails.
На мой взгляд, необходимо проверять наличие этих валидаторов и их параметров в классе модели явно. А для этого нет необходимости даже создавать экземляр класса модели, можно (и даже нужно) тестировать сам класс.
Пример для RSpec:
describe Post do
describe '#title' do
it { is_expected.to validate_presence_of(:title) }
it { is_expected.to validate_length_of(:title).is_at_most(300) }
end
end
Скорей всего, и Minitest тоже умеет что-то подобное.
В итоге, мы проверяем имеет ли модель необходимые нам вызовы методов с нужными параметрами из DSL, который помогает нам описывать правила валидации.
Надеюсь, сейчас то вы и сами знаете, что ваши тесты делают то же самое, а не то, что вы думали🙂 Они ведь так же создают экземпляр класса и вызывают у него метод valid?
is_expected создаёт экземпляр, а validate_* делает остальную "магию" (и это, кстати, делает уже не rspec, а shoulda matchers, который и в Minitest тоже работает).
Please add english captions!
ты просто няшка. У тебя есть парень?)
Эээээкыш, я первый придумал альфонснуться через неё в Германию
@@maxsh2602 "альфонснуться" - ну и слово придумал, угар )))))
Копать узкоспециализированный контент. Нужно ли писать тесты, если в соло работаешь над проектом? Если да то зачем? Ты же и так "тестируешь код" по мере того как его пишешь.
конечно, нужно!
>>Ты же и так "тестируешь код"
кавычки в правильном месте поставлены. код можно протестировать вручную только теоретически :)