Dim*_*tri 3 ruby rspec sinatra rack-test
我花了大约两天时间尝试使用 Rack::Test 发送自定义标头,但没有成功。我只是无法将任何标头发送到我的应用程序中。我在网上找到了很多类似代码的例子——方法(地址、正文、标题),但对我来说它们根本不起作用。
ruby 2.5.1p57 (2018-03-29 修订版 63029) [x86_64-linux]
# grep rack Gemfile.lock
rack (2.0.4)
rack-protection (2.0.1)
rack
rack-test (1.0.0)
rack (>= 1.0, < 3)
rack-protection (>= 1.5.0)
rack (~> 2.0)
rack-protection (= 2.0.1)
rack-test
Run Code Online (Sandbox Code Playgroud)
应用程序中的代码(sinatra):
$log = Logger.new STDERR
class MyApi < Sinatra::Application
before do
$log.debug{ "Headers: #{ headers.keys.inspect }" }
end
get '/offers' do
#... some code
end
post '/offers' do
# .. some another code
end
end
Run Code Online (Sandbox Code Playgroud)
规格/api_spec.rb
RSpec.describe MyApi, '/offers' do
include Rack::Test::Methods
def app
MyApi
end
context '???????????' do
it '?????????? - get ? ???????' do
get '/offers', nil, {
'X-Auth' => 'some key'
}
$log.debug{ "ENV was: '#{ last_request.env.keys }'" }
end
it '?????????? - post ? ???????' do
post '/offers', '', {
'Content-Type' => 'application/json; charset: utf-8',
'X-Auth' => 'some long key'
}
end
end
end
Run Code Online (Sandbox Code Playgroud)
输出包含两个测试:
Headers: ["Content-Type"]
...
ENV was: '["rack.version", "rack.input", "rack.errors",
"rack.multithread", "rack.multiprocess", "rack.run_once",
"REQUEST_METHOD", "SERVER_NAME", "SERVER_PORT", "QUERY_STRING",
"PATH_INFO", "rack.url_scheme", "HTTPS", "SCRIPT_NAME", "CONTENT_LENGTH",
"rack.test", "REMOTE_ADDR", "X-Auth", "HTTP_HOST", "HTTP_COOKIE",
"sinatra.commonlogger", "rack.logger", "rack.request.query_string",
"rack.request.query_hash"]'
Run Code Online (Sandbox Code Playgroud)
此代码正在工作:
get '/offers', nil, { 'X-Auth' => 'long key' }
Run Code Online (Sandbox Code Playgroud)
这也是正确的:
header 'X-Auth', 'some key'
get '/offers'
Run Code Online (Sandbox Code Playgroud)
我改变了在应用程序中查找标题的方式:
request.get_header('HTTP_X_AUTH') || request.env['X-Auth']
Run Code Online (Sandbox Code Playgroud)
第一个 - get_header 在我用 curl 调用我的应用程序时触发,最后一个 - request.env - 在测试时触发。
归档时间: |
|
查看次数: |
1695 次 |
最近记录: |