2017-01-13 6 views
2

Как в rspec вы сравниваете значение чего-то, игнорируя тип?Rails Rspec integer равно string ("1" == 1)

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

    expected: 1234 
     got: "1234" 

    (compared using eql?) 

Я попытался eq (который сравнивает с использованием ==) и eql (которые сопоставляются с помощью eql?) ... Я также читал https://stackoverflow.com/a/32926980/224707.

Как мне сделать rspec считать эти два значения равными?

+0

Ваш вопрос не ясен. Определите понятие «сравнить значение чего-то, игнорируя тип». Согласно вашей идее, строка «A» равна 1, потому что буква «A» появляется ровно один раз в ней? – sawa

+0

Не было бы проще написать 'expect (variable) .to eql model.id.to_s'? –

+0

Вы не можете игнорировать тип при сравнении равенства, потому что '' 1 "' не равно '1'. Вы можете либо перевести '' переменную' в 'целое ', либо' model.id' в 'String'. – lcguida

ответ

8

Экземпляры разных классов не могут быть равны.

Вы должны преобразовать их, чтобы они стали экземплярами одного и того же класса:

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

Так в вашем примере:

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

Cheers @ Eric - похоже, решил. – Nick

2

== проверяет как тип экземпляра и значение быть таким же, так что вам нужно чтобы преобразовать их в одинаковые

Изменить его на любой из

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

или

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

Спасибо @Deepak - просто избили до первого ответа на 1 минуту;) – Nick