【问题标题】:Test "dynamic" page title in a view spec (Rails 4 + RSpec 3)在视图规范中测试“动态”页面标题(Rails 4 + RSpec 3)
【发布时间】: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.rbshow 方法:

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


    【解决方案1】:

    您忘记分配title

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

    【讨论】:

    • 但是如果我必须在我的视图中渲染很多变量,有没有办法自动解析我的视图变量?如果我有一个大视野,我需要为每个变量调用 assign() ?
    • 是的。理想情况下,您不希望控制器操作中有太多实例变量。也许将它们包装成一个对象
    • 好的,我理解逻辑。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多