Rails 使用 Sinatra 引擎的应用程序 - 如何避免 rails 错误?
Rails App with Sinatra engine - How to avoid rails errors?
问题:当 运行 指定输出时非常混乱,它没有说明错误所在,而是抛出误导性错误
它位于 rails lib 文件夹中,并且安装在 routes.rb
# lib/engines/users/app.rb
module Engines
module Users
class App < Sinatra::Base
get '/api/v1/users/me' do
raise 'runtime error here'
end
get '/api/v1/another-route' do
# something here
status 200
end
end
end
end
规范文件看起来像这样:
it 'returns a 200' do
get '/api/v1/users/me', auth_attributes
expect(last_response.body).to eq 'something' # added to clarify my point, it's not the response status that I care of.
expect(last_response.status).to be 200
end
错误:
Failure/Error: expect(last_response.status).to be 200
expected #<Fixnum:401> => 200
got #<Fixnum:1001> => 500
Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
`expect(actual).to eq(expected)` if you don't care about
object identity in this example.
预期错误:
RuntimeError:
runtime error here
另一条路线也失败了:
it 'something' do
get '/api/v1/another-route', auth_attributes
expect(last_response.status).to be 401
json = JSON.parse(last_response.body).with_indifferent_access
expect(json[:message]).to eql "You have been revoked access."
end
错误:打印大量 html 输出,我认为这是 rails 回溯 html 输出
预期错误:none 因为此端点不会引发错误
我的问题是是否有办法:
- 停止rails处理这个,所以它给出实际输出
- 避免整个引擎因为一个路由引发异常而失败
我相信通过解决第一点,第二点也得到解决。
感谢您的宝贵时间
为了解决我的问题,我发现在 spec_helper
上未设置 ENV['RACK_ENV']
,将其设置为 test
解决了问题并抛出异常 I需要调试我的代码。
发生这种情况是因为 https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1832
set :show_exceptions, Proc.new { development? }
development?
返回 true 而实际上应该是 false(需要 RACK_ENV
设置来测试)
现在我得到了正确的输出。
问题:当 运行 指定输出时非常混乱,它没有说明错误所在,而是抛出误导性错误
它位于 rails lib 文件夹中,并且安装在 routes.rb
# lib/engines/users/app.rb
module Engines
module Users
class App < Sinatra::Base
get '/api/v1/users/me' do
raise 'runtime error here'
end
get '/api/v1/another-route' do
# something here
status 200
end
end
end
end
规范文件看起来像这样:
it 'returns a 200' do
get '/api/v1/users/me', auth_attributes
expect(last_response.body).to eq 'something' # added to clarify my point, it's not the response status that I care of.
expect(last_response.status).to be 200
end
错误:
Failure/Error: expect(last_response.status).to be 200
expected #<Fixnum:401> => 200
got #<Fixnum:1001> => 500
Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
`expect(actual).to eq(expected)` if you don't care about
object identity in this example.
预期错误:
RuntimeError:
runtime error here
另一条路线也失败了:
it 'something' do
get '/api/v1/another-route', auth_attributes
expect(last_response.status).to be 401
json = JSON.parse(last_response.body).with_indifferent_access
expect(json[:message]).to eql "You have been revoked access."
end
错误:打印大量 html 输出,我认为这是 rails 回溯 html 输出
预期错误:none 因为此端点不会引发错误
我的问题是是否有办法:
- 停止rails处理这个,所以它给出实际输出
- 避免整个引擎因为一个路由引发异常而失败
我相信通过解决第一点,第二点也得到解决。
感谢您的宝贵时间
为了解决我的问题,我发现在 spec_helper
上未设置 ENV['RACK_ENV']
,将其设置为 test
解决了问题并抛出异常 I需要调试我的代码。
发生这种情况是因为 https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1832
set :show_exceptions, Proc.new { development? }
development?
返回 true 而实际上应该是 false(需要 RACK_ENV
设置来测试)
现在我得到了正确的输出。