0

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

Répondre

0

j'ai pu mettre

puts css_select('#error_explanation') 

juste après la put/patch et il imprime

# Running: 

<div id="error_explanation"> 
<h2> 
2 errors 
prohibited this deal from being saved: 
</h2> 
<ul> 
<li>Size can't be blank</li> 
<li>Size is not a number</li> 
</ul> 
</div> 
F 

Failure: 

I Je cherche toujours quelque chose de mieux que de laisser cette ligne dans les causes suivantes assert_select s échouer!