鉴于我的 API 消费者需要像这样发送客户 HTTP 标头:
# curl -H 'X-SomeHeader: 123' http://127.0.0.1:3000/api/api_call.json
然后我可以像这样在 before_filter 方法中读取此标头:
# app/controllers/api_controller.rb
class ApiController < ApplicationController
before_filter :log_request
private
def log_request
logger.debug "Header: #{request.env['HTTP_X_SOMEHEADER']}"
...
end
end
到目前为止很棒。现在我想使用 RSpec 对此进行测试,因为行为发生了变化:
# spec/controllers/api_controller_spec.rb
describe ApiController do
it "should process the header" do
@request.env['HTTP_X_SOMEHEADER'] = '123'
get :api_call
...
end
end
但是,request
在 ApiController 中接收到的将无法找到 header 变量。
尝试same code
使用 HTTP_ACCEPT_LANGUAGE 标头时,它将起作用。自定义标题是否在某处过滤?
PS:网络上的一些示例使用request
而不是@request
. 虽然我不确定在当前的 Rails 3.2/RSpec 2.14 组合中哪一个是正确的——这两种方法都不会触发正确的行为,但两者都可以使用HTTP_ACCEPT_LANGUAGE
。