Проверка контроллера Rails с помощью Rspec - PullRequest
0 голосов
/ 11 февраля 2020

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Для совместного тестирования контроллера и представлений вы пишете характеристики объекта и спецификации запроса .

Характеристики запроса спецификации нижнего уровня, где вы отправляете HTTP-запросы в ваше приложение и записываете ожидания (или утверждения в TDD lin go) об ответе. Они являются оберткой вокруг ActionDispatch::IntegrationTest. Спецификации запроса следует рассматривать как замену спецификаций контроллера, использование которых не поощряется командами RSpe c и 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, фантомные js, webkit et c) и "настоящие" браузеры через селен. Минимальный эквивалент - ActionDispatch::SystemTestCase, но функции RSpe c не включают его (потребовались годы минимума / тестового блока, чтобы его догнать).

# 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

Эта спецификация тестирует продукты # index и products # show action, а также страница root и связанные представления.

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

0 голосов
/ 11 февраля 2020

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

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

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

...