我目前正在为Ruby类编写测试。该类使用环境变量。
当我使用spec
运行rspec spec/box_api.rb
时,出现以下错误:
Failures:
1) BoxApi#client success Create Boxr::Client object
Failure/Error: subject { BoxApi.new }
KeyError:
key not found: "BOX_USER_ID"
# ./src/clients/box_api.rb:8:in `fetch'
# ./src/clients/box_api.rb:8:in `initialize'
# ./spec/box_api.rb:14:in `block (4 levels) in <top (required)>'
它不是在读取环境变量。
我尝试在spec文件夹中创建.env.test.local
文件,但未成功。我正在使用dotenv
宝石:
# Manage environment with .env file
gem 'dotenv', '~> 2.1.1'
如何在测试中使用环境变量?
答案 0 :(得分:1)
答案 1 :(得分:1)
您无需在测试中使用dotenv
键,而不必为此使用ENV
:
describe Foo do
before do
allow(ENV).to receive(:[]).with('BOX_ID').and_return("1234")
end
it 'flips the environment variable value' do
expect(subject.flip).to eq '4321'
end
end
甚至将整个ENV
存根:
describe Foo do
let(:env) do
{ 'BOX_ID' => '1234' }
end
before do
stub_const("ENV", env)
end
it 'flips the environment variable value' do
expect(subject.flip).to eq '4321'
end
end
我发现它比单独的文件更可靠,更易于维护。