我有几个ruby脚本并使用rspec进行测试。
我把我的环境放在一个env.rb文件中(现在)所以我可以在本地访问它们,并在生产中将它们放在配置变量中。
但是当我运行rspec时,我想要不同的环境变量。两个用例:
答案 0 :(得分:3)
你可以
ENV["FOO_BAR"] = "baz"
Rails.env.test?
以设置twilio和其他具有测试特定选项的客户我个人更喜欢仅在创建对象时使用ENV变量,然后将env var值传递给构造函数,因此我可以在不关心ENV的情况下测试对象类,并且我可以测试初始化其他对象的对象env var,只是声明创建使用了env var。
所以你要改变像
这样的东西class Client
def initialize
@restclient = RestClient::Resource.new(ENV["API_URL"])
end
end
到
class Client
def initialize(url)
@restclient = RestClient::Resource.new(url)
end
end
并且正在初始化该实例然后传递env var
的值def fetch_content
client = Client.new(ENV["API_URL"])
# ...
end
这样你就可以通过传递任何url来测试Client
类而不关心env var,然后可以测试实例化client
的类
it "uses client" do
ENV["API_URL"] = "foo.com"
expect(Client).to receive(:new).with(ENV["API_URL"])
subject.fetch_content
end
更新env var的一个问题是更改在测试套件的其余部分中仍然存在,并且如果您不希望在某些测试中存在问题,则可能会导致问题,在这些情况下,您可以使用
expect(ENV).to receive(:[]).with("API_URL").and_return("foo.com")