2010-05-26 17 views
17

¿Cómo puedo escribir una prueba para afirmar que se representa la acción new?Comprobación de rieles: acción de representación de representación

def method 
    ... 
    render :action => :new 
end 

Busco algo así como las líneas de abajo, pero afirmar que la acción fue llamado, no a la plantilla:

assert_equal layout, @response.layout 
assert_equal format, @request.format 

Yo sé que no puedo hacer @response.action

¡Gracias por adelantado!

Deb

Respuesta

0

La vista se vuelve , la acción llamado . Prueba esto:

@controller.expects(:new) 
+0

Esto prueba que el método de la acción fue llamado. Una acción puede representar cualquier vista que elija o incluso redirigir. – jwadsack

8

Digamos que tiene una acción de controlador para crear, de la siguiente manera:

def create 
    @post = Post.new(params[:post]) 

    respond_to do |format| 
    if @post.save 
     format.html { redirect_to(@post, :notice => 'Post was successfully created.') } 
     format.xml { render :xml => @post, :status => :created, :location => @post } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Y aquí es 'mensajes # nueva' la norma de andamios vista

<h1>New post</h1> 

<% form_for(@post) do |f| %> 
<%= f.error_messages %> 
...... # just to show, it's bigger.... 

Ahora, si se crea con éxito una publicación, quiere que la redireccionen, pero si falla, solo queremos volver a procesar la acción NUEVA. La siguiente prueba usa lo que nuestro principal DJTripleThreat dijo que usara assert_template.

test "should not create post and instead render new" do 
    post :create, :post => { } 

    assert_template :new 
    #added to doubly verify 
    assert_tag :tag => "h1", :child => /New post/ 
    end 

Si aún no flota su barco, yo incluso añadir un assert_tag para asegurarse de que algunas de las vistas se acerca, para que sepa que está representada/prestado al usuario final.

Espero que esto ayude.

70

Para las personas que se encuentran futuras esto, el método correcto es:

assert_template :new 
4

A partir de los carriles 5.0.0, se puede probar que la acción se hace correctamente probando la plantilla mostrada.

Primero debe agregar la gema rails-controller-testing a su Gemfile (ya que se extrajo fuera de Rails desde la versión 5). Luego, en su prueba, sólo tiene que utilizar:

assert_template :new

Cuestiones relacionadas