コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RSpec内にてRails.envによって振る舞いの変わるものをテストしたい場合の書き方

ただのモックの書き方だが具体例を添えて。

環境

rails (5.2.0)
rspec (3.7.0)

やり方

allowとand_returnを使う

allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))

原理

allow({{クラス名}}).to receive({{メソッド名}}).and_return({{代替死体戻り値}})

の形式で戻り値の振る舞いを変えることができる

Rails.env における戻り値の型はただのStringではなく ActiveSupport::StringInquirer

Rails.env
# => "development"
Rails.env.class
# => ActiveSupport::StringInquirer

そのため、それを当てはめてやれば良い

参考サイト