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