with rails from different content_for application ruby-on-rails testing

ruby on rails - rails - Prueba de rieles: afirmar acción de render



rails yield content_for (4)

A partir de Rails 5.0.0, puede probar que la acción se representa correctamente probando la plantilla mostrada.

Primero debe agregar la gema de rails-controller-testing a su Gemfile (ya que se extrajo fuera de los rieles desde la versión 5). Luego, en tu prueba, simplemente usa:

assert_template :new

¿Cómo puedo escribir una prueba para afirmar que se representa la acción new ?

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

Estoy buscando algo como las líneas de abajo, pero para afirmar que se llamó a la acción, no a la plantilla:

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

Sé que no puedo hacer @response.action

¡Gracias por adelantado!

Debutante


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í está la vista ''nueva'' de los mensajes estándar de Scaffold

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

Ahora, si una publicación se crea con éxito, usted desea ser redirigido, pero si falla, solo queremos volver a representar la acción NUEVA. La siguiente prueba usa lo que nuestro hombre principal DJTripleThreat dijo para usar 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 eso todavía no hace flotar su bote, incluso agregaría un assert_tag para asegurarme de que se abra parte de la vista, para que sepa que se muestra / representa al usuario final.

Espero que esto ayude.


La vista sería renderizada , la acción llamada . Prueba esto:

@controller.expects(:new)


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

assert_template :new