【发布时间】:2015-07-21 20:54:07
【问题描述】:
我目前正在学习一个教程,但 Rails 和 Rspec 已经发展,尤其是在编写测试方面。
我的目标是测试当我访问页面“http://domain.fr/users/1”时,页面标题遵循以下格式:"#{base_title} | #{@user.name}" 其中 base_title 是常量。
之前,我看到可以在控制器规范中使用 render_views,但这不是最好的方法,并且在 Rails 4/RSpec 3 中不再存在。
我的最后一次尝试是:
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 的 show 方法:
def show
@user = User.find(params[:id])
@title = @user.name
end
我还在我的 routes.rb 文件中添加了resources :users。
上述测试失败,因为只呈现了标题的常量部分。因此,我认为未调用 Users#show 并且未定义 @title 但我不知道如何实现这一点。
另外,我的目标是避免在我的视图中为每个变量调用 assign(),因为当你有很多变量要渲染时,它可能会出现问题。
感谢您的帮助:)
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 testing rspec railstutorial.org