我目前正在遵循一个教程,但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()? –
是的。理想情况下,您不需要在控制器操作中使用太多的实例变量。也许把它们包装成一个对象 –
好吧,我理解这个逻辑。非常感谢你 ! –