2017-01-13 1 views
2

Comment, dans rspec, comparez-vous la valeur de quelque chose en ignorant le type?Rails Rspec entier est égal à string ("1" == 1)

Failure/Error: expect(variable).to eql model.id 

    expected: 1234 
     got: "1234" 

    (compared using eql?) 

J'ai essayé eq (qui compare l'utilisation ==) et eql (qui compare l'utilisation eql?) ... J'ai aussi lu https://stackoverflow.com/a/32926980/224707.

Comment faire pour que rspec considère ces deux valeurs comme égales?

+0

Votre question n'est pas claire. Définir le concept de "comparer la valeur de quelque chose en ignorant le type". Selon votre idée, la chaîne "A" est-elle égale à 1 parce que la lettre "A" apparaît exactement une fois dedans? – sawa

+0

Ne serait-il pas plus facile d'écrire 'expect (variable) .to eql model.id.to_s'? –

+0

Vous ne pouvez pas ignorer le type en comparant l'égalité car '" 1 "' n'est pas égal à '1'. Vous pouvez soit transformer votre 'variable' en' integer' ou 'model.id' en' String'. – lcguida

Répondre

8

Les instances de classes différentes ne peuvent pas être égales.

Vous devez les convertir afin qu'ils deviennent des instances de la même classe:

"1234" == 1234 
#=> false 
"1234".to_i == 1234 
#=> true 
1234.to_s == "1234" 
#=> true 

Donc, dans votre exemple:

expect(variable.to_i).to eql model.id 
# or less logical : 
expect(variable).to eql model.id.to_s 
+0

Cheers @Eric - semble l'avoir résolu. – Nick

2

== vérifie les type d'instance et valeur à même si vous avez besoin pour les convertir en

Changez-le en l'un ou l'autre

expect(variable.to_i).to eql model.id 

ou

expect(variable).to eql model.id.to_s 
+1

Merci @Deepak - Juste battu à la première réponse d'1 minute;) – Nick