Hen*_*k N 75
你可以做到
Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
Run Code Online (Sandbox Code Playgroud)
然后Rails.env,Rails.development?等将按预期工作.
使用RSpec 3或更高版本,您可能希望使用新的"零monkeypatching"语法(如另一个答案中的@AnkitG所述)以避免弃用警告:
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))
Run Code Online (Sandbox Code Playgroud)
我通常stub_env在spec帮助器中定义一个方法,所以我不必在测试中将所有内容都放在内联中.
要考虑的选项(如此处的评论中所建议的)是依赖于您可以在环境文件中设置并更改测试的更具针对性的配置.
Ank*_*itG 17
Rspec 3以后你可以做到
it "should do something specific for production" do
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))
#other assertions
end
Run Code Online (Sandbox Code Playgroud)
有时返回不同的环境变量可能会令人头疼(所需的生产环境变量,警告消息等).
根据您的情况,作为替代方案,您可以简单地返回测试所需的值,以便将其视为另一个环境.例如,如果你希望Rails相信它正在生产代码,检查Rails.env.production?你可以做这样的事情:
it "does something specific when in production" do
allow(Rails.env).to receive(:production?).and_return(true)
##other assertions
end
Run Code Online (Sandbox Code Playgroud)
你可以做其他环境中,如相同:development?,:staging?等等.如果你不需要返回一个完整环境的满负荷生产,这可能是另一种选择.
小智 -3
如果您使用的是 rspec 之类的东西,您可以存根 Rails.env 为您正在运行的特定测试示例返回不同的值:
it "should log something in production" do
Rails.stub(:env).and_return('production')
Rails.logger.should_receive(:warning).with("message")
run_your_code
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8345 次 |
| 最近记录: |