RSpec 3.4/Rails 4.2: как проверить представление, содержащее button_to
Я использую Rails 4.2 и RSpec 3.4. Я пытаюсь написать тест для представления, которое содержит <%= button_to ... %>
кнопка удаления. Мой тест не проходит с этой ошибкой:
Failures:
1) projects/show.html.erb get secret project as nondisclosed devcomm user shows the obfuscated name and disclosed user
Failure/Error: <%= button_to "Delete this project and reassign all children to parent", {}, method: "delete", data: { confirm: "Are you sure?" }, class: "btn btn-danger" %>
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"projects"}
# ./app/views/projects/show.html.erb:13:in `_app_views_projects_show_html_erb___2105827750050220814_23458641445220'
# ./spec/views/projects/show.html.erb_spec.rb:23:in `block (3 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# ActionController::UrlGenerationError:
# No route matches {:action=>"show", :controller=>"projects"}
# ./app/views/projects/show.html.erb:13:in `_app_views_projects_show_html_erb___2105827750050220814_23458641445220'
Тест выглядит следующим образом:
require 'rails_helper'
RSpec.describe "projects/show.html.erb", type: :view do
fixtures :users, :projects
context "get secret project as disclosed user" do
it "shows the unobfuscated name and disclosed user" do
assign(:user, users(:nondevcomm1))
assign(:project, projects(:secretproject2))
render
expect(rendered).to match "Secret project 2"
expect(rendered).to match "Boo Wah, Another job title"
end
end
context "get secret project as nondisclosed devcomm user" do
it "shows the obfuscated name and disclosed user" do
assign(:user, users(:devcomm1))
assign(:project, projects(:secretproject2))
render ### This is where it fails
expect(rendered).to match "Project 3"
expect(rendered).to match "Boo Wah, Another job title"
end
end
end
Причина, по которой первый тест пройден, а второй - неудачен, заключается в том, что пользователь в первом тесте не является обязательным, а представление имеет условное отображение только button_to, если пользователь является devcomm.
Я нашел этот связанный вопрос Stackru, но поскольку кнопка, вызывающая проблему, удаляет записи, я хочу сохранить ее как кнопку, а не как ссылку, поэтому я не могу просто изменить ее на link_to.
Любые идеи о том, как я могу проверить представление, содержащее button_to?
1 ответ
Я нашел проблему. По мнению, я не предоставлял объект, чтобы действовать. Я изменил <%= button_to ... %>
к этому и сейчас мой тест проходит:
<%= button_to "Delete this project and reassign all children to parent", @project, method: "delete", data: { confirm: "Are you sure?" }, class: "btn btn-danger"
%>