2014-02-12 6 views
2

Недавно я добавил некоторые новый код к before_action в моем ApplicationController:Как подделать HTTP_ACCEPT_LANGUAGE в тестах контроллера RSpec?

class ApplicationController < ActionController::Base 

    before_action :set_locale 

    def set_locale 
    I18n.locale = (session[:locale] || params[:locale] || extract_locale_from_accept_language_header).to_s.downcase.presence || I18n.default_locale 
    end 

    private 

    def extract_locale_from_accept_language_header 
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first 
    end 

end 

Проблема заключается в том, что функция extract_locale_from_accept_language_header разрушает все мои контроллер функции (то есть все, что они не в состоянии в настоящее время). Кажется, RSpec не может обнаружить HTTP_ACCEPT_LANGUAGE.

Есть ли способ подделать это поведение для всех моих спецификаций контроллера?

делает работает, но немного уродлив, так как мне пришлось бы добавить строку request.env... ко всем моим контрольным испытаниям. И у меня их много.

require 'spec_helper' 

describe UsersController do 

    before :each do 
    @user = FactoryGirl.create(:user) 
    request.env['HTTP_ACCEPT_LANGUAGE'] = "en" # ugly 
    end 

    ... 

end 

Может ли кто-нибудь помочь?

Спасибо.

ответ

4

ли это в вашей spec_helper:

config.before :each, type: :controller do 
    request.env['HTTP_ACCEPT_LANGUAGE'] = "en" 
end 

Попробуйте это для обоих контроллеров и художественных спецификаций:

config.before(:each) do |example| 
    if [:controller, :feature].include?(example.metadata[:type]) 
    request.env['HTTP_ACCEPT_LANGUAGE'] = "en" # ugly 
    end 
end 
+0

Отлично, спасибо! Это исправляет все мои спецификации контроллера. Как насчет спецификаций функций? Они все еще терпят неудачу ... – Tintin81

+1

отредактировал мой ответ – apneadiving

+0

'NoMethodError: undefined method 'metadata'' – Tintin81

Смежные вопросы