Je donne les résultats suivants:Quel est le moyen le plus rapide pour déterminer pourquoi un test d'intégration a échoué?
test "should update deal" do
patch user_deal_url(@user, @deal), params: { deal: { name: @deal.name+'xxx' } }
# p @response.body
# p @deal.errors.full_messages
assert_select ".alert", false # should not have alert
assert_redirected_to dashboard_url
follow_redirect!
assert_select ".alert", "Deal was successfully updated."
end
Il dit seulement:
Failure:
DealsControllerTest#test_should_update_deal [C:/Users/Chloe/workspace/test/controllers/deals_controller_test.rb:73]:
Expected response to be a <3XX: redirect>, but was a <200: OK>
Je pensais que je pouvais imprimer @deal.errors.full_messages
mais ce n'est pas le même @deal
dans le contrôleur. Je suis capable d'imprimer tout le corps de la réponse et de le copier dans Notepad ++ et de rechercher les messages d'erreur, mais c'est si fastidieux. Je pensais pouvoir affirmer que .alert
n'existait pas et il me dirait ce que c'était réellement. J'ai ajouté
assert_select "#error_explanation", false # should not have error
Mais cela m'a seulement dit que cela existe, pas pourquoi il a échoué. Alors comment déterminer rapidement pourquoi un modèle ne parvient pas à enregistrer ou mettre à jour dans un contrôleur pendant les tests?
Rails 5.0.2
Référence: http://guides.rubyonrails.org/testing.html
Ma solution provoque assert_select
ultérieures déclarations à l'échec! Le fait d'avoir puts css_select('#error_explanation')
fait échouer le dernier assert_select
, mais comment le faire réussir. Pourquoi?
je suis entré dans un bug Rails pour que, dans le même temps: https://github.com/rails/rails/issues/29367