Mamy dziwny problem. W kontrolerze aplikacji mamy zestaw before_filter
, który wymaga uwierzytelnienia przy użyciu devise
i przekierowuje w razie potrzeby do strony logowania.rspec ignoruje skip_before_filter?
W naszym kontrolerze biblioteki pomijamy tę before_filter
.
skip_before_filter :authenticate_user!, :only => :show
Kiedy uruchomić prosty test funkcjonalny z capybara
i rspec
test zakończy się niepowodzeniem.
it "should get only english articles within the category 'computers'" do
visit '/en/library/computers'
page.should have_content('computers')
end
Wygląda na to, że nie pomija tego filtru. Treść strony jest stroną logowania.
Po uruchomieniu tego z rails server
działa dobrze.
Jakieś pomysły, dlaczego zachowuje się w ten sposób lub na co zwrócić uwagę, aby rozwiązać ten problem?
UPDATE:
To może być Warto dodać, że to dzieje się tylko za pomocą Linuksa. W MacOS 10.7 z tą samą konfiguracją działa dobrze.
Kod Kontroler:
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
application_controller wygląda (bez set_i18n_locale_from_url):
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_i18n_locale_from_url, :authenticate_user!
end
trasach:
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
widzę dokładnie ten sam problem. –