2010-04-06 74 views
1

我有一個由rspec超過一千個測試覆蓋的大型應用程序。國際化域名重定向打破我的測試

我們剛剛作出的選擇來重定向任何頁面,如:

/ 
/foo 
/foo/4/bar/34 
... 

TO:

/en 
/en/foo 
/fr/foo/4/bar/34 
.... 

所以我做了一個在application.rb中過濾器像這樣前:

if params[:locale].blank? 
    headers["Status"] = "301 Moved Permanently" 
    redirect_to request.env['REQUEST_URI'].sub!(%r(^(http.?://[^/]*)?(.*))) { "#{$1}/#{I18n.locale}#{$2}" } 
end 

它工作的很好,但是......它打破了我的很多測試,例如:

it "should return 404" do 
    Video.should_receive(:failed_encodings).and_return([]) 
    get :last_failed_encoding 
    response.status.should == "404 Not Found" 
    end 

要解決這個測試中,我應該怎麼做:

get :last_failed_encoding, :locale => "en" 

但是......認真我不希望解決我的所有考試一個接一個......

我試着使區域設置的默認參數是這樣的:

class ActionController::TestCase 
    alias_method(:old_get, :get) unless method_defined?(:old_get) 
    def get(path, parameters = {}, headers = nil) 
    parameters.merge({:locale => "fr"}) if parameters[:locale].blank? 
    old_get(path, parameters, headers) 
    end 
end 

...但不可能使這項工作... 任何想法?

回答

0

爲什麼不定義此區域設置,如果不是之前?

在你的ApplicationController:

你的應用程序有
params[:locale] = i18n.locale if params[:locale].blank? 

後局部定義和即將成爲鏈接可能是不錯的。

+0

如果您直到最後讀到,您將看到這已不再是問題,我已經解決了我的區域設置問題。我現在的問題是我的測試 – Mike 2010-04-08 10:03:17