Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails测试中临时覆盖配置_Ruby On Rails_Ruby_Testing - Fatal编程技术网

Ruby on rails 在Rails测试中临时覆盖配置

Ruby on rails 在Rails测试中临时覆盖配置,ruby-on-rails,ruby,testing,Ruby On Rails,Ruby,Testing,我需要测试一些Rails代码,但在测试期间,我希望覆盖一些配置选项 在Python背景下,我会这样做: def test(): # ... with change_config(key, new_value): # do stuff with config changed # config is back to old value 我如何在Rails/Ruby中实现这一点?这行吗 def test Rails.config.action_mailer.

我需要测试一些Rails代码,但在测试期间,我希望覆盖一些配置选项

在Python背景下,我会这样做:

def test():
    # ...
    with change_config(key, new_value):
       # do stuff with config changed
    # config is back to old value
我如何在Rails/Ruby中实现这一点?

这行吗

def test
  Rails.config.action_mailer.delivery_method = :test
end
我不是红宝石专家,但这就是我想到的。也许有一种更为惯用的方式来写它,但它对我来说就是这样

包装要执行的代码块,并覆盖该设置,保存原始值,并在该块完成执行后将其还原

# in `test_helper.rb`
def stub_dev_s3_setting(value, &block)
  original_value = Settings.aws.s3.use_s3_in_dev
  Settings.aws.s3.use_s3_in_dev = value
  block.call
ensure
  Settings.aws.s3.use_s3_in_dev = original_value
end
在单元测试中使用:

it 'overrides setting in dev to use s3' do
  stub_dev_s3_setting true do
    # do stuff with AWS S3 and assert that it worked as expected...
    # when this block of code exits, the original value of the setting
    # will be restored automatically
  end
end

在测试中临时启用配置值:

在{Rails.configuration.action\u mailer.raise\u delivery\u errors=true}之前
在{Rails.configuration.action\u mailer.raise\u delivery\u errors=false}

Ruby minitest还是RSpec?什么样的配置:一个环境变量、一个常量、一个方法?你想在一个特定的测试中重新定义一个配置值,而不是在整个测试套件中重新定义一个配置值,我读对了吗?Minitest。一般来说,配置变量;一些比模拟更简单的设置。是的,在单个测试中,仅在调用的地方。您是在讨论Minitest中的配置选项,还是Rails级别的配置选项,或者其他什么?它是Rails级别的配置选项。我希望旧值在调用后自动切换回。我知道我可以手动完成这项工作,但我一直在寻找一种类似于Python的方法。