rspec not_to changement de pas se comporter comme prévu
Je suis en train de vivre quelque déconcertant comportement dans rspec et rspec-rails 2.11.0. J'ai reproduit le comportement d'un co-travailleur de l'application qui s'exécute 2.7.1 (à la fois sur ruby 1.9.3)
Ces tests fonctionnent comme prévu (échoue):
it "should not change i" do
i = 0
expect {
i = 2
}.not_to change { i }
end
it "should not change i" do
i = 0
expect {
i = 2
}.not_to change { i }.from( 0 )
end
Message d'erreur est "le résultat ne devrait pas avoir changé, mais a changé de 0 à 2" dans les deux cas
Changer le "de" dans l'attente d'une valeur différente inexplicablement fait passer, plutôt que de ne pas, peu importe ce qui se passe à la valeur de i dans le fait de s'attendre bloc:
it "should not change i" do
i = 0
expect {
i = 2
}.not_to change { i }.from( 1 )
end
J'ai récemment mis à niveau vers 1.9.3 et je peux dire avec certitude que je l'aurais remarqué ce comportement avant si j'avais connu. Quelqu'un peut-il expliquer ceci, et/ou ce que je fais mal?
OriginalL'auteur Johnny C | 2012-10-02
Vous devez vous connecter pour publier un commentaire.
Je ne le pense pas du tout ce à quoi vous vous attendez, mais la façon dont les tests sont écrits n'a pas vraiment d'exposer ce. Votre dernière valeur échoue parce qu'il n'a jamais été définie comme 1.
L'étape principale en révélant ce qui est de l'inversion de l'essai.
Cette résultats dans les deux premiers tests en passant, et le dernier test échoue avec l'erreur
result should have initially been 1, but was 0
Donc, si nous prenons le problème de test, tel qu'il a été, que vous dites est
i should not change from 1
et depuis je n'est jamais 1, ce test ne manquera jamais.Non, vous êtes des essais que le bloc ne doit pas modifier la valeur de 1, et comme la valeur n'est jamais 1, la déclaration est vraie. Cela fait-il sens? Lorsque vous testez le cas positif (
to_change
) qui ne nécessitentfrom(i) == i
Je suppose que la vente à emporter est de toujours avoir un test séparé pour la valeur initiale si c'est important. En tout cas, merci pour votre aide.
OriginalL'auteur Gazler