我最近在before_action
中的ApplicationController
添加了一些新代码:
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
有人可以帮忙吗?
感谢。
答案 0 :(得分: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