[英]Rails controller test with Rspec
我試圖通過制作經常共享的部分html.erb
文件來組織代碼(例如_form.html.erb
)
我想檢查我的部分代碼是否適用於不同的模型/控制器,所以我從視圖中手動執行 CRUD。
使用Rspec
自動測試我的代碼會更好,但我不知道。 誰能給我一些指導如何使用Rspec
測試控制器代碼?
請求規范是較低級別的規范,您可以在其中向應用程序發送 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 還可以通過 selenium 運行無頭瀏覽器(無頭 chrome、firefox、phantom js、webkit 等)和“真實”瀏覽器。 minitest 等價物是ActionDispatch::SystemTestCase
但 RSpec 功能沒有包裝它(minitest/testunit 花了幾年時間才趕上這里)。
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.