2016-05-10 2 views
3

Я использую 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?

ответ

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" 
%> 
+0

Спасибо, это очень помогло мне. Моя кнопка удаления находилась в другой форме, поэтому мне пришлось использовать этот код: <% = button_to «Удалить», {action:: destroy, id: @ resource.id}, method:: delete, class: "btn btn-danger "%> -> – rmcsharry

 Смежные вопросы

  • Нет связанных вопросов^_^