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
There is a much better way described here: https://stackoverflow.com/a/24052647/362378
it "should do something specific for production" do
allow(Rails).to receive(:env) { "production".inquiry }
#other assertions
end
This will provide all the functions like Rails.env.test? and also works if you just compare the strings like Rails.env == 'production'
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With