gpt4 book ai didi

ruby-on-rails - 如何在 RSpec Controller 测试中伪造 HTTP_ACCEPT_LANGUAGE?

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:13 27 4
gpt4 key购买 nike

我最近在我的 ApplicationController 中的 before_action 中添加了一些新代码:

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 函数破坏了我所有的 Controller 规范(即它们现在都失败了)。似乎 RSpec 无法检测到任何 HTTP_ACCEPT_LANGUAGE

有没有办法为我所有的 Controller 规范伪造这种行为?

以下可以工作,但有点难看,因为我必须将行 request.env... 添加到我所有的 Controller 测试中。我有很多。

require 'spec_helper'

describe UsersController do

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

...

end

有人可以帮忙吗?

谢谢。

最佳答案

在你的 spec_helper 中做:

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

针对 Controller 和功能规范试试这个:

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

关于ruby-on-rails - 如何在 RSpec Controller 测试中伪造 HTTP_ACCEPT_LANGUAGE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21728000/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com