Guillermo,
Perdona que no haya contestado antes… no he podido hacer pruebas hasta
ahora.
El día 24 de enero de 2009 5:09, Guillermo [email protected]
escribió:>
Primero supongo que se trata de un test de vista.
Nope, es un funcional, no sé que es un test de vista.
Es un test de un controlador y una de las cosas que quiero testear es
que el render final es este:
render :partial => ‘papers/comment’, :object => @comment
Segundo, yo tiraría por comprobar que el contenido del partial está en la
vista. Esto me permite integrarlo todo en una vista (partials que con el
tiempo ya no tienen sentido como partials) o dejar la vista como un
compendio de partials (divide y vencerás) sin tener que modificar los tests.
Es que en realidad no quiero comprobar que el partial se está
renderizando junto a otros partials sino que ese partial es lo único
que se está renderizando.
Por que el partial también está en el show del Paper… y un positivo
ahí sería un error para mí pues no quiero que se renderize el show de
Paper sino ese partial y sólo eso.
Y tercero:
ActionView::Base.any_instance.expects(:render).with(:partial =>
‘my_partial’)
o ahora que miro la documentación, parece que solo existe un render en
actioncontroller, de tal manera que quedaría algo así.
ActionController::Base.any_instance.expects(:render).with(:partial =>
‘my_partial’)
Buena aproximación pero no me funa del todo
Si pongo el mock al principio tal que
así:
def test_on_create_with_format_js_should_render_partial
ActionView::Base.any_instance.expects(:render).with(:partial =>
‘papers/comment’)
login_as users(:user1)
post(
:create,
:paper_id => papers(:paper2).id,
:comment => { :text => 'text'},
:format => 'js'
)
assert_response :success
assert_template 'papers/_comment'
end
Me peta porque la invocación al método render no es exactamente así
sino que se le pasa un :object => @comment
unexpected invocation: #AnyInstance:ActionView::Base.render(:partial
=> ‘papers/comment’, :object => #Comment:0x36a8440)
unsatisfied expectations:
Si intento mockear con la llamada tal cual la recibe lo tengo que
hacer después de la llamada al post tal que
así:
def test_on_create_with_format_js_should_render_partial
login_as users(:user1)
post(
:create,
:paper_id => papers(:paper2).id,
:comment => { :text => 'text'},
:format => 'js'
)
ActionView::Base.any_instance.expects(:render).with(:partial =>
‘papers/comment’, :object => assigns(:comment))
assert_response :success
assert_template 'papers/_comment'
end
Me peta porque, me imagino, que el mock espera que se le haga la
invocación al método que mockea desdpués de la declaración y claro la
invocación se hace en el post y no depués… me peta con este error:
expected exactly once, never invoked:
#AnyInstance:ActionView::Base.render(:partial => ‘papers/comment’,
:object => #Comment:0x36b69a0)
Al final el assert_template parece que no está mal del todo y permite
no ponerle el .html.erb que quedaba bastante feo aunque la barrita ‘_’
sí que le hace falta.
Saludos
f.