如何在Rails中测试不同的应用程序配置?

时间:2016-07-29 22:59:18

标签: ruby-on-rails

我有一个模型,其行为应根据配置文件略有变化。理论上,配置文件将针对我的客户端的每个应用程序安装进行更改。那么我该如何测试这些变化?

例如......

# in app/models/person.rb

before_save automatically_make_person_contributer if Rails.configuration.x.people['are_contributers_by_default']



# in test/models/person_test.rb

test "auto-assigns role if it should" do
  # this next line doesn't actually work when the Person#before_save runs...
  Rails.configuration.x.people['are_contributers_by_default'] = true
end

test "won't auto assign a role if it shouldn't" do
  # this next line doesn't actually work when the Person#before_save runs...
  Rails.configuration.x.people['are_contributers_by_default'] = false
end

将这些内容存储在数据库中是没有意义的,因为它们是一次性配置,但我需要确保我的应用程序在所有环境中的所有可能配置下运行。

1 个答案:

答案 0 :(得分:1)

看起来这样做的方法是重写Person类,以便automatically_make_person_contributer实际执行Rails.configuration.x.people['are_contributers_by_default']的评估。这使我的测试很开心,技术上并没有改变应用程序的工作方式:

# in app/models/person.rb

before_save :automatically_make_person_contributer 

private
  def automatically_make_person_contributer
    if Rails.configuration.x.people['are_contributers_by_default']
      # do the actual work here
    end
  end

但是,这意味着每次创建Person时都会检查应用程序进程生命周期内保持不变的值,而不是仅在创建{{Person时检查一次。 1}} class。

在我的特殊情况下,这种权衡很好,但其他人可能想要我的问题的实际答案。