Как загрузить переменные окружения в спецификацию приложения ruby, используя Rspec и .env - PullRequest
0 голосов
/ 04 февраля 2019

В настоящее время я работаю над написанием тестов для класса 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)>'

Не читается переменная среды.

Я безуспешно пытался создать файл .env.test.local в папке spec.Я использую dotenv gem:

# Manage environment with .env file
gem 'dotenv', '~> 2.1.1'

Как мне использовать переменные окружения в тесте?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вместо использования 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

Я считаю это более надежным и простым в обслуживании, чем отдельный файл.

0 голосов
/ 04 февраля 2019

В файле вспомогательного теста вы можете добавить:

require 'dotenv'
Dotenv.load('.env.test.local')

Это в dotev readme

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...