我目前正在遵循一個教程,但Rails和Rspec已經發展,尤其是編寫測試。在視圖規範中測試「動態」頁面標題(Rails 4 + RSpec 3)
我的目標是測試,當我訪問該網頁「http://domain.fr/用戶/ 1」頁面標題遵循以下格式:"#{base_title} | #{@user.name}"
其中base_title是恆定的。
之前,我看到它是可以使用的控制器規格render_views,但它是不是最好的方法,它不會在Rails中存在了4/3的RSpec
我的最後一次嘗試是:
require 'rails_helper'
describe "users/show.html.erb", type: :view do
it "Should finally render a correct title" do
user = FactoryGirl.create(:user)
assign(:user, user)
render template: "users/show.html.erb", layout: "layouts/application.html.erb"
expect(rendered).to have_selector("title", text: user.name)
end
end
我使用一個幫手在application.html.erb渲染:<title><%= title %></title>
這裏是助手:
def title
base_title = "Simple App du Tutoriel Ruby on Rails"
@title.nil? ? base_title : "#{base_title} | #{@title}"
end
而且顯示方法從users_controller.rb:
def show
@user = User.find(params[:id])
@title = @user.name
end
我還添加了resources :users
我的routes.rb文件。
上述測試失敗,因爲只顯示標題的不變部分。因此,我認爲用戶#顯示未被調用,@title未定義,但我不明白如何實現此目的。
另外我的目標是避免在我的視圖中爲每個變量調用assign(),因爲當您有很多變量需要渲染時,它可能會出現問題。
感謝您的幫助:)
但如果我必須使很多變量在我看來,是不是有一種自動自動解析我的視圖的變量? 如果我有一個很大的看法,我需要爲每個變量調用assign()? –
是的。理想情況下,您不需要在控制器操作中使用太多的實例變量。也許把它們包裝成一個對象 –
好吧,我理解這個邏輯。非常感謝你 ! –