0
我正在使用Devise 1.4.2,RSpec 2.6.0和Rails 3.1.0.rc6。我routes.rb
看起來是這樣的:在控制器規範中重定向期望失敗
scope "(:locale)", :locale => /e(s|n)/ do
resources :demotivideos, :only => [:index, :show]
devise_for :users
namespace "admin" do
resources :demotivideos, :except => [:index, :show]
end
end
我spec'ing的是,當沒有用戶登錄ACCES新創建或更新的,他應該被重定向到new_user_session_path
。對於這一點,我使用下面的代碼
context "when not logged in" do
before(:each) do
sign_out user
end
describe "GET new" do
it "should redirect to new user session" do
get :new
response.should redirect_to(new_user_session_path)
end
end
describe "POST create" do
it "should redirect to new user session" do
post :create, :demotivideo => valid_attributes
response.should redirect_to(new_user_session_path)
end
end
describe "PUT update" do
it "should redirect to new user session" do
put :update, :id => 1, :demotivideo => valid_attributes
response.should redirect_to(new_user_session_path)
end
end
end
所有都因爲同樣的原因失敗:預期的路線包括區域設置(默認EN),但實際重定向是沒有語言環境相同的路徑。我的應用控制器修改爲告訴記者,在Rails Guides:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_locale
def default_url_options(options={})
logger.debug "default_url_options is passed options: #{options.inspect}\n"
{ :locale => I18n.locale }
end
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end
我在做什麼錯?