Search code examples
rspecrspec2rspec-rails

mock Rails.env.development? using rspec


I am writing a unit test using rspec.

I would like to mock Rails.env.develepment? to return true. How could I achieve this?.

I tried this

Rails.env.stub(:development?, nil).and_return(true)

it throws this error

activesupport-4.0.0/lib/active_support/string_inquirer.rb:22:in `method_missing': undefined method `any_instance' for "test":ActiveSupport::StringInquirer (NoMethodError)

Update ruby version ruby-2.0.0-p353, rails 4.0.0, rspec 2.11

describe "welcome_signup" do
    let(:mail) { Notifier.welcome_signup user }

    describe "in dev mode" do
      Rails.env.stub(:development?, nil).and_return(true)
      let(:mail) { Notifier.welcome_signup user }
      it "send an email to" do
        expect(mail.to).to eq([GlobalConstants::DEV_EMAIL_ADDRESS])
      end
    end
  end

Solution

  • You should stub in it, let, before blocks. Move your code there and it will work

    And this code works in my tests (maybe your variant can work as well)

    Rails.env.stub(:development? => true)
    

    for example

    describe "in dev mode" do
      let(:mail) { Notifier.welcome_signup user }
    
      before { Rails.env.stub(:development? => true) }
    
      it "send an email to" do
        expect(mail.to).to eq([GlobalConstants::DEV_EMAIL_ADDRESS])
      end
    end