2010-06-08 22 views
2

il était très bizarre que hier, j'étais faire un test d'intégration dans Rails etpourquoi assert_equal() dans Ruby on Rails semble parfois comparer par Identité et parfois par valeur?

assert_equal array_of_obj1, array_of_obj2  # obj1 from db, obj2 created in test 

et il a échoué. Les valeurs affichées dans le tableau et les objets étaient identiques. Si je change le test à

assert array_of_obj1 == array_of_obj2 

Ensuite, il passera.

Mais aujourd'hui, le premier test est effectivement passé. Quelle raison pourrait-il être? Assert_equal utilise-t-il toujours == ou .equal? dans Rails 2.2 ou 2.3.5?

Répondre

2

assert_equal utilise toujours la méthode ==. Ce comportement provient du noyau Ruby et n'est pas remplacé ou modifié dans Rails. Vous pouvez lire la documentation pour assert_equal here

Cependant, il convient de noter que la méthode == se comporte différemment selon l'objet sur lequel elle est appelée. Par exemple, une méthode Object == compare object identity. Cependant, une méthode String == compare le values of the string.