Estamos teniendo un problema extraño. En el controlador de la aplicación tenemos un conjunto before_filter
que requiere autenticación usando devise
y redirige si es necesario a la página de inicio de sesión.rspec ignora skip_before_filter?
En nuestro controlador de biblioteca omitimos este before_filter
.
skip_before_filter :authenticate_user!, :only => :show
Cuando ejecutamos una prueba de funcionamiento sencillo con capybara
y rspec
no pasa la prueba.
it "should get only english articles within the category 'computers'" do
visit '/en/library/computers'
page.should have_content('computers')
end
Parece que no se salta este filtro. El contenido de la página es de la página de inicio de sesión.
Cuando ejecutamos esto con rails server
funciona bien.
¿Alguna idea de por qué se comporta de esta manera o qué hay que buscar para resolver esto?
ACTUALIZACIÓN:
Podría valer la pena añadir que esto sólo sucede usando Linux. En MacOS 10.7 con la "misma" configuración, funciona bien.
Código de control:
class Library::CategoriesController < ApplicationController
skip_before_filter :authenticate_user!, :only => [:show]
# GET /categories/1
# GET /categories/1.json
def show
@categories = Category.all
@category = Category.find(params[:id])
@articles = @category.articles.where(:locale => I18n.locale)
respond_to do |format|
format.html # show.html.erb
end
end
end
El application_controller parece que (sin la set_i18n_locale_from_url):
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_i18n_locale_from_url, :authenticate_user!
end
Rutas:
namespace :library do
get '/' => 'library#index', :as => 'library'
resources :categories, :path => '', :only => [:show]
resources :categories, :path => '', :only => [] do
resources :articles, :path => '', :only => [:show]
end
end
: Viendo a este mismo comportamiento exacto. –