如何将sinatra rack测试异常转储到控制台?

Rub*_*cut 4 rack rspec sinatra

在我开发的过程中,我希望在运行测试时看到sinatra app异常,cosider示例:

require 'sinatra/base'

class ExceptionWeb < Sinatra::Base
  enable :raise_errors
  enable :dump_errors
  configure do 
    enable :dump_errors
  end
  get "/" do
    raise "hell"
    "ok"
  end
  def self.bad_method
    raise "bad method"    
  end
end


require 'rack/test'

describe 'The Web interface' do
  include Rack::Test::Methods

  def app
    ExceptionWeb
  end
  it "should error out" do
    get "/"
    #puts last_response.errors
    #ExceptionWeb.bad_method
    #last_response.should be_ok
  end
end
Run Code Online (Sandbox Code Playgroud)

下面的rspec代码显示没有异常,如果我取消注释last_response,那么我看到有些错误,但我看不出有什么问题.

但是电话mad_method显示我异常.

并且添加puts last_response.errors到每个测试看起来都不合适.

我尝试了sinatra配置选项raise_errors,dump_errors但这对我没什么帮助.

有任何想法吗?

小智 13

ENV['RACK_ENV']设置为默认情况下,Sinatra将按照您希望的方式运行'test'.因为西纳特拉的工作方式,你必须确保这个环境变量设置正确之前解释加载在您的应用程序定义文件(即它检查了这一点:创建应用类,而不是对每个请求.)

  • 是的!我只是将 `ENV['RACK_ENV'] = 'test'` 放在我的 `test_helper.rb` 文件的顶部。 (2认同)

Rub*_*cut 7

这是必须使用的选项组合,然后才能运行.

set :raise_errors, true
set :dump_errors, false
set :show_exceptions, false
Run Code Online (Sandbox Code Playgroud)