platanus / guides

guides!
27 stars 13 forks source link

RSpec + Controladores + Autentificación #59

Closed bunzli closed 9 years ago

bunzli commented 9 years ago

Pareciera ser un desafío especial el poder testear los controladores y rutas cuando se tienen varios before_filter para autorización / autentificación

juliogarciag commented 9 years ago

Creo que es una cosa del diseño. Los filtros es como agrupar funcionalidad en una bolsa de gato detrás de una función así que lo mejor sería no tener muchos. Un filtro, como un callback, es un ejemplo de acción a distancia. Una solución posible, algo que recién se me ocurre ahora, es hacer algo así:

RSpec.describe ThisControllerWithTooManyFilters do
  controller do
    skip_before_filter :this_bad_filter
    skip_before_filter :this_other_bad_filter
  end
end

No lo he probado pero creo que debe funcionar. Pero, muy aparte de ello, tener muchos filtros suele indicar un acoplamiento fuerte entre la funcionalidad específica del controlador y funcionalidades alternas. Personalmente, no me gusta esquivar los filtros sino hacer que el test se comporte de la misma forma que se debe comportar el controlador real. Es decir, los requests deben ser lo más parecidos a la vida real. Por ejemplo, al testear Devise se suele poner un bloque before donde se hace login usando un usuario creado mediante una factory.