如何使用 Rspec 和 .env 将环境变量加载到 ruby 应用程序规范



我目前正在为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 自述文件中

最新更新