在轨道ENV上的红宝石中存储键/值对

Obr*_*ios 4 rspec ruby-on-rails

我想测试一下ENV键值对我的代码的影响.我正在通过使用来解决这个问题

allow(ENV).to receive(:[]).with('ADWORDS_RUN').and_return('No')
Run Code Online (Sandbox Code Playgroud)

这是有效的,直到我更改目标代码以包括访问另一个ENV密钥.目标代码现在包括以下内容

 def not_local_machine?
    !ENV['LOCAL_MACHINE']
 end
Run Code Online (Sandbox Code Playgroud)

现在测试在上述函数中失败并显示错误消息

 Failure/Error: get 'home'
   ENV received :[] with unexpected arguments
     expected: ("ADWORDS_RUN")
          got: ("LOCAL_MACHINE")
    Please stub a default value first if message might be received with other args as well.
Run Code Online (Sandbox Code Playgroud)

看来我目前的存根方法是擦除其他ENV键.如何存根ENV键以避免此问题?

Mor*_*ori 5

您可以使用

stub_const 'ENV', ENV.to_h.merge('ADWORDS_RUN' => 'No')
Run Code Online (Sandbox Code Playgroud)