Tim*_* T. 8 ruby rspec environment-variables
我有几个ruby脚本并用rspec测试它们.
我把我的环境放在一个env.rb文件中(现在)所以我可以在本地访问它们并在生产中将它们放在配置变量中.
但是当我运行rspec时,我想要不同的环境变量.两个用例:
你可以
ENV["FOO_BAR"] = "baz"Rails.env.test?您的初始化程序以设置 twilio 和其他具有测试特定选项的客户端我个人更喜欢仅在创建对象时使用 ENV var,然后将 env var 值传递给构造函数,这样我就可以测试对象类而不关心 ENV,并且我可以测试使用 env var 初始化另一个对象的对象,通过断言创建使用了环境变量。
所以你会改变类似的东西
class Client
def initialize
@restclient = RestClient::Resource.new(ENV["API_URL"])
end
end
Run Code Online (Sandbox Code Playgroud)
到
class Client
def initialize(url)
@restclient = RestClient::Resource.new(url)
end
end
Run Code Online (Sandbox Code Playgroud)
并让初始化该实例的任何内容然后传递环境变量的值
def fetch_content
client = Client.new(ENV["API_URL"])
# ...
end
Run Code Online (Sandbox Code Playgroud)
这样,您可以Client通过传递任何 url 来测试类,而无需关心环境变量,然后可以测试实例化 as 的client类
it "uses client" do
ENV["API_URL"] = "foo.com"
expect(Client).to receive(:new).with(ENV["API_URL"])
subject.fetch_content
end
Run Code Online (Sandbox Code Playgroud)
更新环境变量的一个问题是,该更改会在测试套件的其余部分中持续存在,如果您不希望它出现在某些测试中,则可能会导致问题,在这些情况下,您可以使用以下命令来模拟该值
expect(ENV).to receive(:[]).with("API_URL").and_return("foo.com")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7676 次 |
| 最近记录: |