我目前正在为Ruby类编写测试。该类使用环境变量。
当我使用 rspec spec/box_api.rb
运行spec
时,出现以下错误:
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)>'
它不是读取环境变量。
我尝试在规范文件夹中创建.env.test.local
文件,但没有成功。我正在使用dotenv
宝石:
# Manage environment with .env file
gem 'dotenv', '~> 2.1.1'
如何在测试中使用环境变量?
您可以在测试中存根ENV
键,而不是为此使用 dotenv
:
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
我发现这比单独的文件更可靠、更易于维护。
在测试帮助程序文件中,可以添加:
require 'dotenv'
Dotenv.load('.env.test.local')
这是在 dotenv 自述文件中