Ich verwende die rails-api Edelstein, um einen Web-Service aufzubauen und meine API mit RSpec zu testen. Jede Anfrage, die ich mache, hat unabhängig von der HTTP-Methode den Header CONTENT_TYPE
als "application/x-www-form-urlencoded" gesetzt. Dies ist nicht wirklich ein Problem, bis ich versuche wrap_parameters in meinem Controller zu verwenden, und es habe keine Auswirkung auf die params hash:Einstellung Content-Type-Header für RSpec und Rails-API
class ApplicationController < ActionController::API
include ActionController::ParamsWrapper
end
class ProjectsController < ApplicationController
wrap_parameters :project, include: [:name]
# ...
end
This hack nicht mehr funktioniert (@request ist gleich Null), und keiner der anderen Stack Overflow Posts habe ich entweder gefunden.
Wenn ich die folgende Anfrage in meinem RSpec Test machen:
put "/projects/1.json", {name: 'Updated Project 1'}
und einen Debugger in meinem Controller habe ich bekommen:
(rdb:1) p params
{ "name"=>"Updated Project 1",
"action"=>"update",
"controller"=>"projects",
"id"=>"5539bbd9-010c-4cfb-88d3-82dadbc99507",
"format"=>"json"
}
(rdb:1) p request.content_type
"application/x-www-form-urlencoded"
Ich erwarte so etwas wie dies für die sehen params-Hash (man beachte die Zugabe des Leitprojekts):
{ "name"=>"Updated Project 1",
"action"=>"update",
"controller"=>"projects",
"id"=>"5539bbd9-010c-4cfb-88d3-82dadbc99507",
"format"=>"json",
"project" => {"name" => "Updated Project 1"}
}
Ist es Möglich, den Inhaltstyp Header nur mit RSpec zu setzen? Oder muss ich Rack/Test für diese Funktionalität verwenden?
Es gibt eine Chance, dass [wrap_parameters noch gesprengt] (https://github.com/rails-api/rails-api/issues/33) mit dem Projekt rails-api, und das hat nichts mit dem Festlegen des Inhaltstyps zu tun. –
bestätigt, dass wrap_parameters funktioniert, indem Sie das: url_encoded_form Format Methodenaufruf: 'wrap_parameters Format: [: url_encoded_form,: json]' –
Sie Elemente der rspec Anfrage Umgebung in einem Regler mit 'request.env einstellen [ 'HTTP_CONTENT_TYPE'] = 'application/json'' oder was auch immer du brauchst. – nmott