Недавно я добавил некоторые новый код к 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
Может ли кто-нибудь помочь?
Спасибо.
Отлично, спасибо! Это исправляет все мои спецификации контроллера. Как насчет спецификаций функций? Они все еще терпят неудачу ... – Tintin81
отредактировал мой ответ – apneadiving
'NoMethodError: undefined method 'metadata'' – Tintin81