gpt4 book ai didi

ruby-on-rails - rspec 测试时处理环境源常量的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 08:39:23 24 4
gpt4 key购买 nike

我有一个模型,它的常量看起来像:

  SOURCE_QUOTA = {
'free' => (ENV['FREE_SOURCE_QUOTA'] || '5').to_i,
'premium' => (ENV['PREMIUM_SOURCE_QUOTA'] || '100').to_i
}.freeze
RuboCop 建议使用“Style/MutableConstant”,并且应该卡住。
但是,在测试期间,我想使用略有不同的值。现在,我实际上可以修改我启动 rspec 的 bash session 的 ENV。当然。但是在代码中修改它会让生活更轻松。例如:
  describe "a thing" do
it "does stuff" do
ENV['FREE_SOURCE_QUOTA'] = '2'
DataSource::SOURCE_QUOTA["free"] = ENV['FREE_SOURCE_QUOTA'].to_i
# test code
当常量未卡住时,上述内容有效。我认为这是因为,当模型被卡住时,在加载 Rails 环境期间加载了模型,然后这个值不能被静音(它被卡住了!)。
在这里做什么最好?
  • 坚持使用卡住常量并确保在 rspec 运行之前设置所需的环境?
  • 不要卡住常量并保持上述测试
  • 做其他涉及解冻/重新卡住/重新加载模型的事情吗?

  • 谢谢!

    最佳答案

    我认为 anout g 是一个类方法而不是一个常量。像这样的东西:

    # in your model
    def self.source_quota
    {
    'free' => (ENV['FREE_SOURCE_QUOTA'] || '5').to_i,
    'premium' => (ENV['PREMIUM_SOURCE_QUOTA'] || '100').to_i
    }
    end
    然后在您的测试中模拟该方法,如下所示:
    allow(DataSource).to receive(source_quota)and_return('free' => 2)

    关于ruby-on-rails - rspec 测试时处理环境源常量的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64634646/

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