L'envoi des en-têtes personnalisés par le biais de RSpec
Donné mon API que les consommateurs sont tenus d'envoyer à un client HTTP en-tête comme ceci:
# curl -H 'X-SomeHeader: 123' http://127.0.0.1:3000/api/api_call.json
Ensuite, je peux lire cet en-tête dans un before_filter méthode comme ceci:
# 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
Jusqu'à présent les grands. Maintenant, je voudrais tester cette aide RSpec comme il y a un changement dans le comportement:
# 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
Cependant, la request
reçu dans ApiController ne sera pas en mesure de trouver l'en-tête variable.
Lors de la tentative de la same code
avec HTTP_ACCEPT_LANGUAGE en-tête, il va fonctionner. Sont des en-têtes personnalisés filtré quelque part?
PS: Quelques exemples autour de l'utilisation du web request
au lieu de @request
. Alors que je ne suis pas certain que l'on est correct que de l'Rails 3.2/RSpec 2.14 d'une combinaison de ces deux méthodes ne déclenchera pas le bon comportement, MAIS travaillent tous les deux avec HTTP_ACCEPT_LANGUAGE
ainsi.
Vous devez vous connecter pour publier un commentaire.
bien, peut-être trop tard pour les gens, mais simplement à être alignés:
juste demande d'appel.les en-têtes avec les paramètres appropriés.
request
est aussi nulrequest
...). L'en-tête n'arrivera pas. Est-ce dans un contrôleur de spec? Êtes-vous capable de lire la valeur dans un before_filter?get :index, {param => value}, {header => value}
alors qu'en réalité, je voulais mettre les en-têtes de requête premier, à l'aiderequest[header] = value; get :index, param => value
. Merci!rspec-rails (3.4.0)
etrails (4.2.5)
Vous pouvez le définir dans
get
directement.J'ai juste vérifié qu'il fonctionne dans la console.
request.env
, cet en-tête s'affiche.get
est Rails deActionDispatch::Integration::RequestHelpers
méthode, pas Rspec. Je ne l'ai pas dans Rspec, mais je suis à 100% sûr que cela va fonctionner de la même.@request.env['HTTP_ACCEPT_LANGUAGE'] = 'en'
ainsi - cela fonctionne et que la variable peut être lu à l'aide derequest.env
. Semble qu'il y est un filtre passe dont je ne suis pas au courant.request.env
mais derequest.headers
api.rubyonrails.org/classes/ActionDispatch/... en-têtes personnalisés ne seront pas inclus dansrequest.env
github.com/rails/rails/blob/...RSpec demande spécifications changé dans les Rails 5 de sorte que la coutume
headers
etparams
doit désormais être définie à l'aide de la clé-valeur de hachage arguments. E. g.:Avant dans Rails 4:
Maintenant pour Rails 5: