Mock Rails.env.development? используя rspec
Я пишу unit test с помощью rspec.
Я хотел бы высмеять Rails.env.develepment? для возврата true. Как я мог достичь этого?
Я пробовал это
Rails.env.stub(:development?, nil).and_return(true)
он выдает эту ошибку
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-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
Ответы
Ответ 1
Вы должны зайти в блоки it
, let
, before
. Переместите свой код там, и он будет работать
И этот код работает в моих тестах (возможно, ваш вариант также может работать)
Rails.env.stub(:development? => true)
например
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
Ответ 2
Здесь намного лучший способ: fooobar.com/info/167993/...
it "should do something specific for production" do
allow(Rails).to receive(:env) { "production".inquiry }
#other assertions
end
Это обеспечит все функции, такие как Rails.env.test?
, а также будет работать, если вы просто сравните строки, такие как Rails.env == 'production'