Rspec测试:`eql?`匹配器失败

时间:2015-09-11 12:02:07

标签: ruby-on-rails ruby rspec

我在撰写规范时遇到了麻烦:

 Failure/Error: expect(Question.all.count).to eql(0)

       expected: 0
            got: 0.0

       (compared using eql?)

为什么count会返回一个浮点值,即使它没有,也不会期望为true

1 个答案:

答案 0 :(得分:2)

我不知道为什么Question.all.count会返回0.0,但匹配器正在按预期工作。根据{{​​3}}:

expect(a).to equal(b) # passes if a.equal?(b)
expect(a).to eql(b)   # passes if a.eql?(b)
expect(a).to be == b  # passes if a == b

在你的情况下expect(0.0).to eql(0)调用:

0.0.eql?(0) #=> false

它会返回fase,因为这就是documentation的工作方式:

  

仅当objFloat并且值float时,才返回true。将其与执行类型转换的Float#eql?进行对比。

要与a == b进行比较,请使用:

expect(Question.all.count).to be == 0

expect(Question.all.count).to eq(0)