2010-12-13 18 views
5

Estoy tratando de probar la presencia de un formulario. Soy nuevo en Rails.Rails: "falta parcial" al llamar a 'render' en la prueba RSpec

contenidos Mi new.html.erb_spec.rb de archivo son:

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 vista en sí, new.html.erb, tiene el código:

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

Cuando corro rspec, falla como tal:

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)>' 

¿Alguien sabe cuál es el problema?

Gracias!

+0

¿Podría intentar usar have_form_posting_to en lugar de have_form_putting_to y ver si todavía obtiene el error? – Raghu

+0

Intente eliminar la barra inicial de la ruta de acceso. – zetetic

+0

Gracias Raghu, no noté que estaba usando el método incorrecto. Aún así recibo el error. – WoodenKitty

Respuesta

6

no dan ningún argumento para "renderizar". intente lo siguiente

require 'spec_helper' 

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

tipo de extraño, pero funciona (asigna no funciona más -> usa variables de instancia) – grosser

1

he experimentado el mismo tema y voy a describir lo que hice para solucionar esto, en caso de que no haya encontrado la solución todavía. Creo que el problema es que rspec informa un error engañoso aquí. El error real es otra cosa.

I encontraron esta a cabo por primera cambiar la línea a:

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

Esto permitió que el error real a la superficie. En mi caso, no estaba configurando las variables necesarias, que corregí.

Una vez que haya configurado las asignaciones correctamente, la especificación se ejecutó correctamente.

A continuación, puede volver a cualquiera:

render "messages/new.html.erb" 

o incluso sólo

render 

tanto va a funcionar. Falta el problema de la plantilla debe desaparecer. Al menos lo hizo por mí. :)

1

Me encontré con un problema similar, y me sorprendió saber que Rspec hace una inferencia impresionante del argumento de descripción. Por ejemplo:

require 'spec_helper' 

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

Debido a algunos nombres de controlador/vista evolutivo, esto prueba que originalmente tenía:

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

que realmente en mal estado todo para arriba, e incluso si fijo la plantilla después de render, se no se puede encontrar un parcial referenciado. La reparación de la ruta en la declaración de descripción lo solucionó todo.

Cuestiones relacionadas