Rails Rspec整数等于字符串(" 1" == 1)

时间:2017-01-13 10:15:22

标签: ruby-on-rails ruby rspec integer comparator

在rspec中,你如何比较某些东西的价值而忽略了这种类型?

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认为这两个值相等?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

==检查实例类型和值是否相同,因此您需要将它们转换为相同

将其更改为一个

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

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