2010-12-13 69 views
5

J'essaie de tester la présence d'un formulaire. Je suis nouveau à Rails.Rails: «missing partial» lors de l'appel de «render» dans le test RSpec

Mon contenu du fichier new.html.erb_spec.rb sont:

require 'spec_helper' 

describe "messages/new.html.erb" do 
    it "should render the form" do 
    render '/messages/new.html.erb' 
    reponse.should have_form_putting_to(@message) 
    with_submit_button 
    end 
end 

La vue elle-même, new.html.erb, a le code:

<%= form_for(@message) do |f| %> 
    <%= f.label :msg %> <br /> 
    <%= f.text_area :msg %> 
    <%= f.submit "Submit" %> 
<% end %> 

Quand je lance rspec, il échoue donc:

1) messages/new.html.erb should render the form 

Failure/Error: render '/messages/new.html.erb' 

    Missing partial /messages/new.html with {:handlers=>[:erb, :rjs,:builder,:rhtml, :rxml], :formats=>[:html,:text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]} in view paths "/Users/tristanmartin/whisperme/app/views" 

    # ./spec/views/messages/new.html.erb_spec.rb:5:in `block (2 levels) in <top (required)>' 

Est-ce que quelqu'un sait quel est le problème?

Merci!

+0

Pourriez-vous utiliser has_form_posting_to au lieu de have_form_putting_to et voir si vous recevez toujours l'erreur? – Raghu

+0

Essayez de supprimer la barre oblique du nom de chemin. – zetetic

+0

Merci Raghu, je n'ai pas remarqué que j'utilisais la mauvaise méthode. Toujours obtenir l'erreur cependant. – WoodenKitty

Répondre

6

ne donne aucun argument pour 'rendre'. essayez le suivant

require 'spec_helper' 

describe "messages/new.html.erb" do 
    it "should render the form" do 
    render 
    rendered.should contain('blablabla') 
    end 
end 
+0

un peu étrange, mais fonctionne (assigne ne fonctionne plus -> utiliser des variables d'instance) – grosser

1

J'ai rencontré le même problème et je vais décrire ce que j'ai fait pour résoudre ce problème, au cas où vous n'avez pas encore trouvé la solution. Je pense que le problème est que rspec signale une erreur trompeuse ici. La vraie erreur est autre chose.

Je trouve cela en changeant d'abord la ligne:

render :template => "messages/new.html.erb" 

Cela a permis à l'erreur réelle à la surface. Dans mon cas, je ne configurais pas la ou les variables requises, ce que j'ai corrigé.

Une fois que vous avez correctement défini les affectations, les spécifications ont fonctionné correctement.

Ensuite, vous pouvez revenir soit:

render "messages/new.html.erb" 

ou même

render 

les deux fonctionneront. Problème de modèle manquant devrait être disparu. Au moins, ça l'a fait pour moi. :)

1

J'ai rencontré un problème similaire, et j'ai été surpris d'apprendre que Rspec fait une inférence impressionnante à partir de l'argument de description. Par exemple:

require 'spec_helper' 

describe "bills/payments/edit.html.erb" do 
    it "Renders payment form" do 
    assign(:payment, stub_model(Payment)) 
    render 
    end 
end 

En raison de certains noms contrôleur d'évolution/vue, ce test avait à l'origine:

describe "bills/payment/edit.html.erb" do 

qui a vraiment tout foiré, et même si je mets le: modèle rendu à la fin, il a été impossible de trouver un partiel référencé. La fixation du chemin dans l'instruction describe a tout fixé.