Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Качество Основы разработки на Ruby on Rails

Программа урока

  • Автоматизация стилистики кода с помощью Rubocop
  • Повышение безопасности приложения с Brakeman
  • Создание интеграционных тестов
  • Удобный сетап тестов фикстурами
  • Изолируем тест: паттерн "Транзакционные тесты"
  • Дебаг кода с помощью binding.irb

Полезные команды

# Генерация нового проекта
rails new rails-quality
# Установка новых зависимостей после добавления их в Gemfile
bundle install
# Запуск линтера
bundle exec rubocop
# safe auto correction Автокорректирование стилистики
bundle exec rubocop -a
# При флаге -A может измениться бизнес логика
bundle exec rubocop -A

# Генерация контроллера с экшенами
rails g controller notes index show
# Генерация модели с атрибутами
rails g model Note title:string description:text
# Выполнение миграции
rails db:migrate
# Запуск сервера
rails s
# Заполнение базы фикстурами
rails db:fixtures load
rails c
# в консоли
# Note.delete_all

bundle exec brakeman

# Генерация тестов
rails g integration_test notes_flow

# Запуск тестов
bin/rails test:integration

Gemfile

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

group :development, :test do
  # Гем для отладки. Вызов debugger() приводит к остановке и вызову binding.irb
  gem 'byebug', platforms: %i[mri mingw x64_mingw]
end

group :development do
  # Гем для статического анализа и безопасности приложения
  gem 'brakeman'
end

# Rubocop - линтер и статический анализатор
gem 'rubocop', require: false
gem 'rubocop-rails', require: false

notes_controller.rb

class NotesController < ApplicationController
  def index
    @notes = Note.all.order(created_at: :desc)
  end

  def show
    # debugger
    @note = Note.find(params[:id])
  end
end

index.html.erb

<h1>Notes</h1>

<% @notes.each do |note| %>
  <h4><%= link_to note.title, note_path(note) %></h4>
  <p><%= note.description %></p>
<% end %>

show.html.erb

<h1>Note page</h1>
<h4><%= @note.title %></h4>
<p><%= @note.description %></p>

<%= link_to "Back", notes_path %>

routes.rb

Rails.application.routes.draw do
  root 'notes#index'
  # get 'notes', to: 'notes#index'
  # get 'notes/show'

  resources :notes, only: [:index, :show]
end

notes_flow_test.rb

require "test_helper"

class NotesFlowTest < ActionDispatch::IntegrationTest
  # Rails автоматически используют транзакционные тесты
  # self.use_transactional_tests = false
  test 'opens all notes page' do
    get root_url
    assert_response :success
    assert_select 'h1', 'Notes'
  end

  test 'opens one note page' do
    note = Note.create(title: "Title 1", description: "Description 1")

    # debugger

    get note_url(note.id)
    assert_response :success
    assert_select 'h1', 'Note page'
    assert_select 'h4', 'Title 1'
    assert_select 'p', 'Description 1'
  end

  test 'opens one note page with fixture' do
    note = notes(:one)
    get note_url(note)
    assert_response :success
    assert_select 'h1', 'Note page'
    assert_select 'h4', 'Title 1'
    assert_select 'p', 'Description 1'
  end
end

Фикстуры

# при загрузке фикстур создается хелпер, с помощью которого можно получить модели
# В тестах
notes_list = notes()

# Можно получить объект из фикстур по ключу в yaml файле фикстуры
note = notes(:one)

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 5 октября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»