2017-09-01 2 views
1

J'aimerais tester avec RSpec un contrôleur recevant ce type de demande:test un contrôleur avec un corps distinct et querystring params

curl -X POST         \ 
    --data "{\"same_key\": \"value_in_body\"}" \ 
    --header "same_key: value_in_header"   \ 
    "http://localhost:5000/articles/?same_key=value_in_querystring" 

ayant:

  • same_key dans le corps
  • same_key dans l'en-tête
  • same_key dans le querystring

et où:

  • request.request_parameters["same_key"]: "value_in_body"
  • request.headers["same_key"]: "value_in_header"
  • request.query_parameters["same_key"]: "value_in_querystring"

j'ai écrit ce test:

RSpec.describe ArticlesController, type: :controller do 
    describe '#create' do 
    it 'creates an article' do 
     post :post, 
     as:  :json, 
     params: { same_key: 'value_in_body' }, 
     headers: { same_key: 'value_in_header' } 

     expect(response).to have_http_status(:created) 
    end 
    end 
end 

Jusqu'à présent, ce serait bon pour le corps param et le en-tête param.

Mais comment devrions-nous faire pour envoyer le querystring param?

Répondre

0

Si vous avez vraiment besoin de ce genre de scénario, vous devez utiliser le modèle URI Rails au lieu de ne spécifier le nom d'action dans la déclaration de poste,

post '/documents/create_new_doc', params: {same_key: 'value_in_body'} 

Note: Obtenez le modèle URI exacte de routes râteau

+0

Je le sais. Mais alors comment pouvons-nous faire pour ne pas surcharger le _body_ param (parce que les deux ont la même clé)? –

+0

Oui, j'ai compris, parce que c'est une demande de publication. Ainsi, au lieu d'utiliser le nom de l'action, vous pouvez utiliser le modèle RUI comme 'sessions /' que vous pouvez obtenir à partir des routes rake. – Mohanraj

+0

Ce modèle est utilisé par les tests de demande de RSpec. Dans le contexte d'un test de contrôleur RSpec, le premier argument doit être une action, pas un chemin. –