私はconfig/environment.rb
でLOCAL_SETTINGSと呼ばれる定数を定義しており、これは私のアプリケーション全体で設定と使用に使用しています。 config/local_settings.yml
に保存されているYAMLファイルで、APIキーなどの機密データが含まれることがあります。Rspec - config/environment.rbで定義されている定数をスタブする方法はありますか?
私は現在、LOCAL_SETTINGS["slack"]["slack_token"]
を使用する方法の仕様を書いています。
問題は、定数が私の期待通りにスタブされていないことです。つまりexpect(subject.path).to eq(help_request)
は、スタブされていないLOCAL_SETTINGS
ハッシュを含むパスを返すため失敗します。
stub_const
の下にデバッガを置き、LOCAL_SETTINGS
と入力すると、stub_constが機能していることがわかります。
私の質問は以下のとおりです。
- は、私が
config/environment.rb
で定義されている定数のために働いてスタブを取得するためにRSpecの中で行うことができます何かありますか? - この定数は他の場所で単に定義する必要がありますか?もしそうなら、どこ?私はapp/lib /とspec/foldersで自分のアプリケーション全体にアクセスする必要があります。
マイconfig/environment.rb
ファイル:
# Load the Rails application.
require_relative 'application'
LOCAL_SETTINGS = YAML.load_file("#{Rails.root}/config/local_settings.yml")
# Initialize the Rails application.
Rails.application.initialize!
マイスペック:
describe RequestBuilder, type: :model do
let(:help_params) { {"user_name"=>"some_user_name", "text"=>"release-bot help"} }
let(:help_builder) { RequestBuilder.new(help_params) }
let(:help_request) { "/api/files.upload?file=lib%2Fresponses%2Fhelp&filetype=ruby&channels=stubbed_channel&token=stubbed_token" }
let(:slack_settings) { {"slack"=>{"slack_token"=>"stubbed_token", "slack_channel"=>"stubbed_channel"}} }
context 'Given an incoming request' do
context 'With a correctly formatted request' do
context 'And the "help" command' do
subject { help_builder.build_request_hash }
it 'builds a request containing the help data' do
stub_const("LOCAL_SETTINGS", slack_settings)
expect(subject).to have_key(:request)
expect(subject[:request].path).to eq(help_request)
end
end
end
end
end