如何在RSPEC中设置区域设置

如何在RSPEC中设置区域设置,rspec,locale,Rspec,Locale,我是RSPEC的新手。我编写了一个名为result_spec.rb的RSPEC代码,如下所示: describe '#grouped_scores' do subject { result.grouped_scores } let(:result) { create(:result, user: user) } its(:keys) { is_expected.to eq [1] } its([1]) { is_expected.to be_within(0.001).of(6) } end

我是RSPEC的新手。我编写了一个名为result_spec.rb的RSPEC代码,如下所示:

describe '#grouped_scores' do
subject { result.grouped_scores }

let(:result) { create(:result, user: user) }

its(:keys) { is_expected.to eq [1] }
its([1]) { is_expected.to be_within(0.001).of(6) }
end
def grouped_scores
  s = 0
  if score > 10 && I18n.locale == :zh then
    s = 2
  end
  return s
end
然后,当我在名为result.rb的模型中编写该方法时,示例代码如下:

describe '#grouped_scores' do
subject { result.grouped_scores }

let(:result) { create(:result, user: user) }

its(:keys) { is_expected.to eq [1] }
its([1]) { is_expected.to be_within(0.001).of(6) }
end
def grouped_scores
  s = 0
  if score > 10 && I18n.locale == :zh then
    s = 2
  end
  return s
end
然而,当我在本地测试RSPEC时,我不断得到以下错误:

Failures:
1) Result#grouped_scores keys should eq [1]
 Failure/Error: its(:keys) { is_expected.to eq [1] }

   expected: [1]
        got: []

   (compared using ==)
 # ./spec/models/result_spec.rb:39:in `block (3 levels) in <top (required)>'
2) Result#grouped_personality_scores [1] should be within 0.001 of 6
 Failure/Error: its([1]) { is_expected.to be_within(0.001).of(6) }
   expected 0 to be within 0.001 of 6
 # ./spec/models/result_spec.rb:40:in `block (3 levels) in <top (required)>'
故障:
1) 结果#分组#分数键应等于[1]
失败/错误:其(:keys){is_应为eq[1]}
预期:[1]
得到:[]
(使用==进行比较)
#./spec/models/result_spec.rb:39:in'block(3层)in'
2) 结果#分组#个性#分数[1]应在6分的0.001范围内
失败/错误:它的([1]){应该在(6)的(0.001)之内]
预计0在6的0.001范围内
#./spec/models/result_spec.rb:40:in'block(3层)in'
所以我想知道,是不是因为我没有将I18n.locale设置为“zh”,所以它没有得到值?如果是,如何在RSPEC中分配区域设置?或者我还需要知道什么来调试RSPEC中的错误

请帮忙!谢谢

测试区域设置

# Assuming I have a LocalesController with check_for_locale action
describe LocalesController do

  after(:each) do
    I18n.locale = :en
  end

  it "should check if the locale is zh" do
    get :check_for_locale, locale: :zh
    expect(I18n.locale).to eq(:zh)
  end

  it "should check if the locale is set to default that is english" do
    get :check_for_locale
    expect(I18n.locale).to eq(:en)
  end

end
locales_controller.rb

class LocalesController < ApplicationController

  def check_for_locale

  end

end
class LocalesController
rspec
中设置语言环境是什么意思?我将分享一个我理解的例子,我可能错了。因为在我的应用程序中,我想根据不同的语言对分数进行分组。因此,我想在rspec中,我应该在收集分数之前测试语言是否正确设置。谢谢你的回答。在第一部分中,在(:each)do I18n.locale=:en end之后使用。我可以知道这样做的目的吗?I18n是一个全局作用域,您需要在再次使用它之前重置它,否则之前的值仍将被存储。因此,在运行每个场景之前,我将其设置为默认值,即
en