Я использую Rails 4.2 и RSpec 3.4. Я пытаюсь написать тест просмотра для представления, содержащего кнопку удаления <%= button_to ... %>
. Мой тест терпит неудачу с этой ошибкой:RSpec 3.4/Rails 4.2: как проверить представление, содержащее 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
Причина первый тест проходит, и второй не может потому, что пользователь в первом тесте nondevcomm и вид имеет условное отображение только кнопки button_to, если пользователь devcomm.
Я нашел this related StackOverflow question, но поскольку кнопка, вызывающая проблему, удаляет записи, я хочу сохранить ее как кнопку, а не ссылку, поэтому я не могу просто изменить ее на link_to.
Любые идеи о том, как я могу проверить представление, содержащее button_to?
Спасибо, это очень помогло мне. Моя кнопка удаления находилась в другой форме, поэтому мне пришлось использовать этот код: <% = button_to «Удалить», {action:: destroy, id: @ resource.id}, method:: delete, class: "btn btn-danger "%> -> – rmcsharry