0
Je veux tester mon contrôleur et assurez-vous qu'il rend le modèle approprié chaque fois qu'il reçoit un ActiveRecord::RecordNotFound
Rspec3: Envoyer une exception au contrôleur
Le contrôleur:
class QuestionnaireController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, with: :verses_not_found
def poem
@questionnaire = JSON.parse(session[:questionnaire], symbolize_names: true)
rawVerses = VerseSelector.select_verses(@questionnaire[:trait_category], @questionnaire[:message_category])
@poem = PoemCustomizer.customize_poem(rawVerses, @questionnaire)
end
def verses_not_found
render 'questionnaire/verses_not_found'
end
end
Mon test:
describe "GET 'poem'" do
it "renders questionnaire/verses_not_found.html if theres an ActiveRecord::RecordNotFound exception" do
verse_selector = double("VerseSelector", select_verses: ActiveRecord::RecordNotFound.new("Verses not found"))
get 'poem', nil, {questionnaire: {receiver_name:"a",location:"b",relationship:"coach",trait_category:"adventurous venturous",message_category:"You hurt my feelings"}}.to_json
expect(response).to render_template(:verses_not_found)
end
end
Je ne suis pas du tout sûr de mon test, qui génère actuellement une erreur: NoMethodError: undefined method 'each' for #<String:0xbcdf388>
Comment écrire correctement mon test?
Je Stub poème pour élever RecordNotFound puis tester pour voir si verses_not_found a été reçue lors de l'appel poème moi-même. Puis un autre test pour voir si la dernière méthode a rendu la bonne page. –
Je créerais une action anonyme qui déclencherait RecordNotFound et obtenir cette action pour vérifier que le modèle attendu est rendu – Benj