Skip to content

Latest commit

 

History

History
38 lines (30 loc) · 1.09 KB

mock-rails-environment-with-an-inquiry-instance.md

File metadata and controls

38 lines (30 loc) · 1.09 KB

Mock Rails Environment With An Inquiry Instance

As discussed in Make A String Attribute Easy to Inquire About, the Rails.env is assigned an instance of ActiveSupport::StringInquirer. This allows us to ask whether the current Rails environment is #production?, #development?, etc.

With this in mind, we can have a test execute in a specific environment by mocking how Rails.env responds. Though the actual env for a test is going to be test, we can simulate a different environment with an RSpec before block like the following:

before do
  allow(Rails).to receive(:env) { "staging".inquiry }
end

Or similarly, to simulate the production environment:

before do
  allow(Rails).to receive(:env) { "production".inquiry }
end

The #inquiry being monkey-patched onto the String class gives you the willies, you could do the following instead:

before do
  allow(Rails).to receive(:env) do
    ActiveSupport::StringInquirer.new("production")
  end
end

source