我有一个模型,其行为应根据配置文件略有变化。理论上,配置文件将针对我的客户端的每个应用程序安装进行更改。那么我该如何测试这些变化?
例如......
# 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
将这些内容存储在数据库中是没有意义的,因为它们是一次性配置,但我需要确保我的应用程序在所有环境中的所有可能配置下运行。
答案 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。
在我的特殊情况下,这种权衡很好,但其他人可能想要我的问题的实际答案。