在 RSpec 中测试 Rails 视图:为啥当我想测试“索引”时它会路由到“显示”?
Posted
技术标签:
【中文标题】在 RSpec 中测试 Rails 视图:为啥当我想测试“索引”时它会路由到“显示”?【英文标题】:Testing Rails views in RSpec: why does it route to "show" when I want to test "index"?在 RSpec 中测试 Rails 视图:为什么当我想测试“索引”时它会路由到“显示”? 【发布时间】:2015-06-03 14:35:27 【问题描述】:我在spec/views/users/index_spec.rb
中有这个非常基本的视图规范:
require 'rails_helper'
RSpec.describe "users/index", type: :view do
before(:each) do
@user = create(:user)
assign(:users, [@user])
end
it "renders a list of users" do
render
expect(page).to have_selector "tr##dom_id(@user)"
end
end
执行它时,它告诉我以下内容:
Failures:
1) users/index renders a list of users
Failure/Error: render
ActionView::Template::Error:
No route matches :action=>"show", :controller=>"users", :id=>nil, :locale=>#<User id: 1, name: "Rosalinda Dach", email: "marilie@leffler.ca", encrypted_password: "$2a$04$G/z6lbFUpnh9FD3bymYBE.LrJK3acKr4TsURgCq7B77...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: nil, confirmed_at: "2015-06-03 14:33:11", confirmation_sent_at: nil, unconfirmed_email: nil, failed_attempts: 0, unlock_token: nil, locked_at: nil, created_at: "2015-06-03 14:33:12", updated_at: "2015-06-03 14:33:12", avatar: nil> missing required keys: [:id]
# /Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/actionpack-4.2.1/lib/action_dispatch/journey/formatter.rb:46:in `generate'
# /Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:727:in `generate'
# /Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:758:in `generate'
# /Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:801:in `url_for'
# /Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:280:in `call'
# /Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:345:in `block (2 levels) in define_url_helper'
为什么测试路由到users#show
而不是users#index
?
【问题讨论】:
【参考方案1】:您可以更改您的代码:
RSpec.describe "users/index.html.erb", type: :view do
【讨论】:
【参考方案2】:由于我没有找到合适的解决方案,我决定创建自己的在线 Markdown 编辑器,带有复制和粘贴功能:PIMP (Pasteable Images, Markdown,Pandoc)。
http://pimp.suhail.uberspace.de/en
它看起来还不是很好,但它提供了使用 Pandoc 非常强大的 Markdown 创建语义上很棒的文档所需的一切,将图像直接从剪贴板粘贴到文本中,并将文档导出为各种格式(当时是 Docx 、Epub、Odt,也许以后还有 PDF)。
目前,要使用 PIMP,必须创建一个用户帐户。
整个项目与其说是一个真正的项目,不如说是一个概念验证,但如果人们喜欢并使用它,我很乐意将它变成一个真正的项目。
【讨论】:
以上是关于在 RSpec 中测试 Rails 视图:为啥当我想测试“索引”时它会路由到“显示”?的主要内容,如果未能解决你的问题,请参考以下文章