Chúng tôi đang gặp vấn đề lạ. Trong bộ điều khiển ứng dụng, chúng tôi có một tập hợp before_filter
yêu cầu xác thực bằng cách sử dụng devise
và chuyển hướng nếu cần thiết cho trang đăng nhập.rspec bỏ qua skip_before_filter?
Trong bộ điều khiển thư viện của chúng tôi, chúng tôi bỏ qua điều này before_filter
.
skip_before_filter :authenticate_user!, :only => :show
Khi chúng tôi chạy một thử nghiệm chức năng đơn giản với capybara
và rspec
thử nghiệm thất bại.
it "should get only english articles within the category 'computers'" do
visit '/en/library/computers'
page.should have_content('computers')
end
Dường như nó không bỏ qua bộ lọc này. Nội dung trang là của trang đăng nhập.
Khi chúng tôi chạy điều này với rails server
, nó hoạt động tốt.
Bất kỳ ý tưởng nào tại sao nó hoạt động theo cách này hoặc những gì cần tìm để giải quyết vấn đề này?
UPDATE:
Nó có thể là giá trị thêm rằng điều này chỉ xảy ra sử dụng Linux. Theo MacOS 10.7 với thiết lập "tương tự" nó hoạt động tốt.
Mã Bộ điều khiển:
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
Các application_controller trông giống như (không có set_i18n_locale_from_url):
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_i18n_locale_from_url, :authenticate_user!
end
Tuyến đường:
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
tôi nhìn thấy hành vi tương tự chính xác này. –