在运行rspec for ruby时,如何更改环境变量?
我有几个ruby脚本,并用rspec测试它们 我将我的环境放在一个env.rb文件中(目前),这样我就可以在本地访问它们,并在生产环境中将它们放在配置变量中 但是当我运行rspec时,我想要不同的环境变量。两个用例:在运行rspec for ruby时,如何更改环境变量?,ruby,rspec,environment-variables,Ruby,Rspec,Environment Variables,我有几个ruby脚本,并用rspec测试它们 我将我的环境放在一个env.rb文件中(目前),这样我就可以在本地访问它们,并在生产环境中将它们放在配置变量中 但是当我运行rspec时,我想要不同的环境变量。两个用例: 我运行Twilio,因此我希望能够更改用于测试凭据的SID 我将事物作为服务存储在数据库中,并希望有一个单独的测试数据库 你可以 使用ENV[“FOO_BAR”]=“baz” 检查初始化器中的Rails.env.test?,以使用特定于测试的选项设置twilio和其他客户端 有
- 我运行Twilio,因此我希望能够更改用于测试凭据的SID
- 我将事物作为服务存储在数据库中,并希望有一个单独的测试数据库
- 使用
ENV[“FOO_BAR”]=“baz”
- 检查初始化器中的
,以使用特定于测试的选项设置twilio和其他客户端Rails.env.test?
- 有一个包含所有环境设置的文件用于测试,然后使用
- 你可以
class Client
def initialize
@restclient = RestClient::Resource.new(ENV["API_URL"])
end
end
到
并让初始化该实例的任何东西传递env var的值
def fetch_content
client = Client.new(ENV["API_URL"])
# ...
end
通过这种方式,您可以通过只传递任何url来测试客户机
类,而不必关心环境变量,然后可以测试实例化客户机
的类
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")
您应该只在测试套件中使用环境变量。因此,使用其他凭据而不是生产凭据初始化Twillio客户端。如何在测试套件中设置环境变量?明确地在上下文中?我想这是有道理的。谢谢,我在上下文中设置,如果在多个上下文中测试,我需要重复吗?我不使用Rails,那么#2怎么玩呢?我没有听懂你的最后一段。这是参考#1吗?理想情况下,您应该在(:each)之前在
中重复设置。请注意,使用env vars的一个特点是,一旦您在测试中设置了它,所有其他测试都将具有该值,这可能是无害的,但如果您看到测试在单独运行时通过,但在与其他suitee一起运行时失败,请记住这一点,即使您说过不要使用到env的直接绑定,我很喜欢。谢谢分享
expect(ENV).to receive(:[]).with("API_URL").and_return("foo.com")