Comment définir les en-têtes de requête dans la spécification de requête rspec?

Dans les spécifications du contrôleur, je peux définir l’en-tête http comme ceci:

request.accept = "application/json" 

mais dans la spécification de la requête, l’object “request” est nul. Alors, comment puis-je le faire ici?

La raison pour laquelle je veux définir l’en-tête http accepter pour json est que je peux le faire:

 get '/my/path' 

au lieu de cela

 get '/my/path.json' 

    Vous devriez pouvoir spécifier les en-têtes HTTP comme troisième argument de votre méthode get (), comme décrit ici:

    http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

    et ici

    http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process

    Donc, vous pouvez essayer quelque chose comme ça:

     get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"} 

    Je l’ai utilisé dans Test :: Unit:

     @request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client" get :index 

    Pour moi, cela fonctionne simple request.headers["My Header"] = "something"

    J’ajoute ceci ici, car j’ai été bloqué en essayant de le faire dans Rails 5.1.rc1

    La signature de la méthode get est légèrement différente maintenant.

    Vous devez spécifier les options après le chemin en tant qu’arguments de mot clé, c.-à-d.

    get /some/path, headers: {'ACCEPT' => 'application/json'}

    FYI, l’ensemble des arguments de mots-clés sont les suivants:

    params: {}, headers: {}, env: {}, xhr: false, as: :symbol

    Utilisation de rspec avec Rack::Test::Methods

     header 'X_YOUR_HEADER_VAR', 'val' get '/path' 

    L’en-tête var viendra comme X-Your-Header-Var

    Je dois configurer les en-têtes séparément

     request.headers["Accept"] = "application/json" 

    Essayer de l’envoyer via get / delete / …. est une erreur complète dans les rails4 et me fait mal à la tête car il n’est jamais envoyé en tant qu’en-tête mais comme paramètre.

     {"Accept" => "application/json"} 

    Essayez quelque chose comme:

     get :index, :format => 'json' 

    Pour envoyer à la fois xhr: true et les en-têtes, j’ai dû faire par exemple:

     my_headers = { "HTTP_ACCEPT": "application/json" } get my_path, xhr: true, headers: my_headers 

    Votre question a déjà reçu une réponse, mais si vous souhaitez poster quelque chose à une autre action, vous devez le faire:

     post :save, {format: :json, application: {param1: "test", param2: "test"}} 

    Avec RSpec 3, vous pouvez utiliser la syntaxe suivante

     get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" } 

    Comme décrit dans la documentation officielle de Rspec (le lien pointe vers la v3.7)