Dans les spécifications du contrôleur, je peux définir l'en-tête d'acceptation http comme ceci:
request.accept = "application/json"
mais dans la spécification de la demande, l'objet "demande" est nul. Alors, comment puis-je le faire ici?
La raison pour laquelle je veux définir l'en-tête d'acceptation http sur json est que je peux le faire:
get '/my/path'
au lieu de cela
get '/my/path.json'
ruby-on-rails
json
testing
rspec
Sergey
la source
la source
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
:authorization
.get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
`J'ai utilisé ceci dans Test :: Unit:
la source
ActionController::TestCase
Cookie
dans le hachage des en-têtes (car c'est ce que mon navigateur envoie), mais cela n'a pas fonctionné. Puis je l'ai faitrequest.keys
et j'ai vu une clé nomméeHTTP_COOKIE
. Utiliser cela a fonctionné. Ils devraient vraiment mieux documenter cela.J'ajoute ceci ici, car je suis resté bloqué en essayant de le faire dans Rails 5.1.rc1
La signature de la méthode get est maintenant légèrement différente.
Vous devez spécifier les options après le chemin comme arguments de mot-clé, c'est-à-dire
get /some/path, headers: {'ACCEPT' => 'application/json'}
Pour info, l'ensemble complet d'arguments de mots-clés est:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
la source
Cela fonctionne pour les spécifications du contrôleur, pas pour les spécifications de demande:
la source
request.headers
ourequest.env
Je dois configurer les en-têtes séparément
Essayer de l'envoyer via get / delete / .... est une poubelle complète dans rails4 et me fait mal à la tête car il n'est jamais envoyé en en-tête mais en paramètre.
la source
Utilisation de rspec avec
Rack::Test::Methods
L'en-tête var apparaîtra comme
X-Your-Header-Var
la source
Test::Unit
, pas pour RSpec.ndefined method 'header'
erreur pour moi.Avec RSpec 3, vous pouvez utiliser la syntaxe suivante
Comme décrit dans la documentation officielle de Rspec (le lien pointe vers la v3.7)
la source
Pour envoyer les deux
xhr: true
et les en-têtes, j'ai dû faire par exemple:la source
headers =
êtremy_headers =
?Votre question a déjà reçu une réponse, mais si vous souhaitez POSTER quelque chose dans une autre action, vous devez le faire:
la source
Essayez quelque chose comme:
la source
format=json
tant que paramètre de requête. Pas la même chose qu'un champ d'en-tête.