0

我目前正在遵循一個教程,但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(),因爲當您有很多變量需要渲染時,它可能會出現問題。

感謝您的幫助:)

回答

1

你忘了title分配:

assign(:user, user) 
assign(:title, user.name) 
+0

但如果我必須使很多變量在我看來,是不是有一種自動自動解析我的視圖的變量? 如果我有一個很大的看法,我需要爲每個變量調用assign()? –

+1

是的。理想情況下,您不需要在控制器操作中使用太多的實例變量。也許把它們包裝成一個對象 –

+0

好吧,我理解這個邏輯。非常感謝你 ! –