2 votes

Existe-t-il une réponse par défaut pour les tests de contrôleurs Rspec lorsqu'aucune action n'est transmise ?

Je suis tombé sur cette spécification de contrôleur qui n'a pas d'action transmise. Il est clair pour moi qu'il ne teste rien. Mais l'attente pour un response.status == 200 n'échoue pas. J'aimerais donc comprendre comment Rspec construit les tests de contrôleurs et s'il existe une fonction par défaut response.status == 200 .

describe 'SomeController', type: :controller do 
  let!(:user){ FactoryGirl.create :admin_user }
  before { sign_in user }

  describe 'GET#action' do 
    it 'response is success' do 
      expect(response.status).to eq 200
    end
 end
end 

 Finished in 0.93954 seconds (files took 1.63 seconds to load)
1 example, 0 failures

2voto

Paul Fioravanti Points 5886

En tant que Les documents de spécification du contrôleur RSpec indiquent :

Une spécification de contrôleur est une enveloppe RSpec pour une spécification R ( ActionController::TestCase::Behavior ).

Ainsi, en regardant la documentation du code de l'application ActionController::TestCase::Behavior , dans le cadre de la Section des variables d'instance spéciales , on constate que ActionController::TestCase fournira automatiquement a @response variable d'instance ( lisible comme un simple response dans le test ), qui est "un ActionDispatch::TestResponse représentant la réponse de la dernière réponse HTTP". Cela semble donc expliquer pourquoi il existe un objet response peut être consulté sans avoir besoin d'une demande explicite dans la spécification d'un contrôleur, mais pourquoi le statut de l'élément est 200 ?

Bien, ActionDispatch::TestResponse hérite de ActionDispatch::Response qui lorsqu'il est initialisé, fournit 200 comme statut par défaut . Vous pouvez même tester cela dans votre console de rails :

> ActionDispatch::TestResponse.new
=> #<ActionDispatch::TestResponse:0x007fc449789b68
 @blank=false,
 @cache_control={},
 @charset=nil,
 @committed=false,
 @content_type=nil,
 @cv=
  #<MonitorMixin::ConditionVariable:0x007fc449789848
   @cond=#<Thread::ConditionVariable:0x007fc449789820>,
   @monitor=#<ActionDispatch::TestResponse:0x007fc449789b68 ...>>,
 @etag=nil,
 @header={"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff"},
 @mon_count=0,
 @mon_mutex=#<Thread::Mutex:0x007fc449789a50>,
 @mon_owner=nil,
 @sending=false,
 @sending_file=false,
 @sent=false,
 @status=200, # <<< Here's your default status.
 @stream=#<ActionDispatch::Response::Buffer:0x007fc449789938 @buf=[], @closed=false, @response=#<ActionDispatch::TestResponse:0x007fc449789b68 ...>>>

J'espère donc que cette plongée en profondeur vous a aidé à mieux comprendre le système d'information de la Commission européenne. response dans les spécifications du contrôleur RSpec, comme cela a été le cas pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X