内部 RESTful API の認証をテストするために使用されるハッシュを生成する次のコードがあります。
問題は、生成されたハッシュがエスケープされた値を返すことです。
json_headers
メソッドは次のようなものを返す必要があります。
{"Authorization"=>"Basic ZnBfZXJwOllrdGh4aHRSZTZWM1d1d09oeVlmcW0xTg==", "Accept"=>"application/json"}
しかし戻ってきます:
{\"Authorization\"=>\"Basic ZnBfZXJwOllrdGh4aHRSZTZWM1d1d09oeVlmcW0xTg==\\n\", \"Accept\"=>\"application/json\"}
Rubyハッシュから生のキー/値を返す簡単な方法を知っている人はいますか?
コードは次のとおりです。
module ERP
class CustomersMock
def json_headers
authorization_hash.merge("Accept"=>"application/json")
end
def authorization_hash
{"Authorization" => "Basic #{base64_user_pass}"}
end
def user_pass
# user:password
[ ERP_CONF['user'], ERP_CONF['password'] ].join(':')
end
def base64_user_pass
Base64.encode64(user_pass)
end
def add(customer)
customers << customer
end
def customers
[]
end
def run
ActiveResource::HttpMock.respond_to do |mock|
customers.each do |customer|
mock.get "/customers/#{customer.id}.json", json_headers, customer.to_json
end
end
end
end
end
何らかの理由で、ヘッダー ハッシュを所定の場所にハードコーディングすると機能しますが、json_headers
メソッドを呼び出すと、respond_to
ブロックはそれらを文字列に変換し、値をエスケープします。
rspec の失敗は次のとおりです。
Could not find a response recorded for <GET: /api/customers/1011.json [{"Authorization"=>"Basic ZnBfZXJwOllrdGh4aHRSZTZWM1d1d09oeVlmcW0xTg==", "Accept"=>"application/json"}] ()> - Responses recorded are: ["<GET: /api/customers/1011.json [{\"Authorization\"=>\"Basic ZnBfZXJwOllrdGh4aHRSZTZWM1d1d09oeVlmcW0xTg==\\n\", \"Accept\"=>\"application/json\"}] ()>"]