2016-05-10 20 views
3

Ich verwende Rails 4.2 und RSpec 3.4. Ich versuche, einen Ansichtstest für eine Ansicht zu schreiben, die eine <%= button_to ... %> Löschschaltfläche enthält. Mein Test nicht mit diesem Fehler:RSpec 3.4/Rails 4.2: Wie man eine Ansicht mit 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' 

Der Test wird wie folgt dar:

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 

Der Grund, die erste Test Pässe und die zweiten nicht, weil der Benutzer im ersten Test ist nondevcomm und die Aussicht hat eine Bedingung, die button_to nur anzuzeigen, wenn der Benutzer devcomm ist.

Ich habe gefunden this related StackOverflow question, aber weil die Schaltfläche, die das Problem löscht Datensätze verursacht, möchte ich es als eine Schaltfläche und nicht eine Verknüpfung beibehalten, so dass ich es nicht nur zu einem Link_to ändern kann.

Irgendwelche Ideen, wie ich eine Ansicht testen kann, die ein button_to enthält?

Antwort

1

Ich habe das Problem gefunden. In der Sicht habe ich das Objekt nicht zur Verfügung gestellt. Ich änderte die <%= button_to ... %> zu diesem und jetzt mein Test überschreitet:

<%= button_to "Delete this project and reassign all children to parent", @project, method: "delete", data: { confirm: "Are you sure?" }, class: "btn btn-danger" 
%> 
+0

Dank dieses half mir sehr. Meine Lösch-Schaltfläche war in einem anderen Format, also musste ich diesen Code verwenden: <% = button_zu "Löschen", {action:: destroy, id: @ resource.id}, methode:: löschen, klasse: "btn btn-danger "%> -> – rmcsharry