我正在使用rspec编写单元测试。
我想模仿Rails.env.develepment?返回真实。我怎么能做到这一点?。
我试过这个
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)
更新 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
答案 0 :(得分:51)
这里有一个更好的方法:https://stackoverflow.com/a/24052647/362378
it "should do something specific for production" do
allow(Rails).to receive(:env) { "production".inquiry }
#other assertions
end
这将提供Rails.env.test?
等所有功能,如果你只是比较像Rails.env == 'production'
答案 1 :(得分:16)
您应该在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