ruby-on-rails - matchers - ruby on rails selenium
Cómo probar la representación de un parcial con RSpec (6)
Quiero probar la representación de un parcial particular de acuerdo con algunas condiciones.
Por ejemplo, en el modelo show action view show.html.erb
tengo:
<% if condition1 %>
<%= render :partial => "partial1" %>
<% else %>
<%= render :partial => "partial1" %>
<% end %>
Lo intenté:
response.should render_template("partial_name")
pero dice que produjo la plantilla "mostrar"
esperando <"partial1"> pero representando con <"model / show, layouts / application">
¿Que estoy haciendo mal?
A partir de Rails 5.1, se desaconseja este tipo de prueba y debe probar el controlador y la vista como un todo .
Comprobar qué parte es renderizada por el control es parte de los detalles de implementación que no debe probar.
Por lo tanto, le sugiero que escriba una prueba de solicitud y verifique que algún texto relevante de su parcial esté presente en el cuerpo de la respuesta.
get root_path
expect(CGI.unescape_html(response.body)).to include(''Hello World'')
En lugar de la solución mencionada anteriormente, puede verificar alternativamente, si el html es que los renders parciales están presentes. P.ej
response.body.should have_tag("div#foo")
La última versión de rspec sugiere utilizar la sintaxis de expect
lugar de:
expect(response).to render_template(partial: ''partial_name'')
Si está probando esto dentro de un controlador , debería hacer algo como esto:
RSpec.describe Users::RegistrationsController, type: :controller do
describe "GET #new" do
render_views
it "render customer partial" do
get :new
expect(response).to render_template :new
expect(response).to render_template(partial: ''_new_customer'')
end
end
end
Tenga en cuenta que necesitamos render_views como se informa en la relishapp.com/rspec/rspec-rails/docs/controller-specs/… .
Y esta es la línea que probará si se representa el parcial "_new_customer":
expect(response).to render_template(partial: ''_new_customer'')
Debe proporcionar el nombre del parcial con el guión bajo inicial.
También tenga cuidado porque en su código las sentencias IF y ELSE representan la misma cosa.
Si se usa en controladores rspec
expect(response).to render_template(partial: ''home/_sector_performance'')
También prueba esto
response.should render_template(:partial => ''partial_name'')