我在ruby中创建了2个不同的对象,具有完全相同的属性和值.
我现在要比较两个对象的内容是否相同,但以下比较:
actual.should == expected
actual.should eq(expected)
actual.should (be expected)
Run Code Online (Sandbox Code Playgroud)
失败了:
Diff:
@@ -1,4 +1,4 @@
-#<Station:0x2807628
+#<Station:0x2807610
Run Code Online (Sandbox Code Playgroud)
在rspec/ruby中有什么方法可以轻松实现这一点吗?
干杯!!
Eri*_*ker 11
这样做的惯用方法是覆盖#==运算符:
class Station
def ==(o)
primary_key == o.primary_key
end
def hash
primary_key.hash
end
end
Run Code Online (Sandbox Code Playgroud)
执行此操作时,通常也要覆盖该#hash方法.覆盖#eql?或不太常见#equal?.
编辑:在这个特定情况下,你可以做的另一件事,不涉及覆盖#==,是制作自定义RSpec匹配器.
使用 have_attributes 匹配器指定对象的属性与预期属性匹配:
Person = Struct.new(:name, :age)
person = Person.new("Jim", 32)
expect(person).to have_attributes(:name => "Jim", :age => 32)
expect(person).to have_attributes(:name => a_string_starting_with("J"), :age => (a_value > 30) )
Run Code Online (Sandbox Code Playgroud)
小智 5
有点晚了,但您可以将其序列化,例如:
require 'json'
expect(actual.to_json).to eq(expected.to_json) #new rspec syntax
actual.to_json.should eq(expected.to_json) #old rspec syntax
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8832 次 |
| 最近记录: |