Проверка контроллера Rails с помощью Rspec

Я пытаюсь организовать код, создав частичные файлы html.erb , которые часто используются совместно (например, _form.html.erb )

Я хочу проверить, хорошо ли работает мой частичный код с разными моделями / контроллерами, поэтому я вручную выполняю CRUD из представлений.

Было бы лучше проверить мой код автоматически с помощью Rspec но я понятия не имею. Кто-нибудь может дать мне несколько Rspec как тестировать код контроллера с Rspec ?

Всего 2 ответа


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

Спецификации запросов - это спецификации более низкого уровня, в которые вы отправляете HTTP-запросы в ваше приложение и пишете ожидания (или утверждения на языке TDD) относительно ответа. Они являются оберткой вокруг ActionDispatch::IntegrationTest . Спецификации запроса следует рассматривать как замену спецификаций контроллера, использование которых не поощряется командами RSpec и Rails.

# spec/requests/products_spec.rb
require 'rails_helper'
RSpec.describe "Products", type: :request do
  describe "GET /products" do
     let!(:products) { FactoryBot.create_list(:product, 4) }
     it "contains the product names" do
        get "/products"
        expect(response).to include products.first.name
        expect(response).to include products.last.name
     end
  end
end

Спецификации функций - это спецификации более высокого уровня, ориентированные на историю пользователя. Они часто служат приемочными испытаниями. Они используют браузерный симулятор под названием Capybara, который эмулирует пользователя, просматривающего приложение. Capybara также может запускать безголовые браузеры (безголовый Chrome, Firefox, Phantom Js, WebKit и т. Д.) И «настоящие» браузеры через селен. Минимальным эквивалентом является ActionDispatch::SystemTestCase но функции RSpec не обертывают его (потребовались годы минимального тестирования / тестирования), чтобы его здесь догнать.

# Gemfile
gem 'capybara'
# spec/features/products_spec.rb
require 'rails_helper'
RSpec.feature "Products" do
  let!(:products) { FactoryBot.create_list(:product, 4) }

  scenario "when a user views a product" do
    visit '/'
    click_link 'Products'
    click_link products.first.name
    expect(page).to have_content products.first.name
    expect(page).to have_content products.first.description
  end
end

В этой спецификации проверяется действие products # index и products # show, а также корневая страница и связанные представления.

Оба типа спецификаций имеют свои сильные и слабые стороны. Функциональные тесты хороши для тестирования больших областей приложения, но тяжелы. Спецификации запросов быстрее и проще реплицировать конкретный запрос, который вызывает ошибку / проблему, но вы в основном просто сопоставляете HTML с регулярными выражениями, которые сильно ограничены.


Проверить, работает ли частичный код с различными моделями / контроллерами. Вы можете добавить render_views в спецификации контроллера.

Как проверить код контроллера с помощью Rspec? Прочитайте официальный документ https://relishapp.com/rspec/rspec-rails/docs/controller-specs

И эта страница может помочь: https://thoughtbot.com/blog/how-we-test-rails-applications


Есть идеи?

10000