2011-08-28 36 views
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 

我在做什麼錯?

回答

1

好像雖然Rails Guides使用def default_url_optionsDevise您需要def self.default_url_options。不過,不知道區別。