2010-04-06 4 views
1

У меня есть большое приложение, охватывающее более тысячи тестов через rspec.перенаправление i18n меняет мои тесты

Мы просто сделали выбор перенаправить страницу, как:

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

К:

/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? 

После того, как ваше приложение имеет местное определение и Futur ссылка может быть хорошим.

+0

Если вы прочитали до конца, вы увидите, что это уже не проблема, я уже решил проблему с локалью. Моя проблема теперь с моими испытаниями – Mike