考慮在寶石用下面的代碼,我們的主要應用程序的依賴性:如何嘲笑從輔助的方法在RSpec的
module Module1
module Module2
module EnvInit
def stub_env(name, value)
stub_const('ENV', ENV.to_hash.merge(name => value))
end
end
end
end
RSpec.configure do |config|
config.include Module1::Module2::EnvInit
config.before(:each) do
stub_env('NAME', 'John Doe')
end
end
我們主要的應用程序使用.ENV文件爲我們的環境變量。但是,出於某種原因,上面的代碼會覆蓋ENV['NAME']
。我們沒有獲得這種寶石,所以爲了我們的測試將持續,我想嘲笑時stub_env
被調用,像這樣:
before do
# tried this with `allow_any_instance_of` as well
allow(Module1::Module2::EnvInit).to receive(:stub_env).with('NAME','John Wayne')
end
OR
it "should match name to John Wayne" do
EnvInit.any_instance.should_receive(:stub_env).with('NAME','John Wayne')
end
等我試過嘲笑的各種方式,但我的目標stub_env
的作品都沒有。所有stub_env
看到是John Doe
。
簡而言之,我想stub_env
通過模擬方式獲得value == John Wayne
。
'RSpec.configure'部分可能來自一個gem的spec文件。你不應該在你的應用程序中包含這些文件。如果包含該寶石會自動添加寶石的測試設置,那麼這是一個應該修復的嚴重錯誤。 – Stefan