所以我正在写一个rspec测试。它将测试模型是否正确复制。所以规范是这样的:
it "should copy the data" do @model = build(:model) @another_model.copy_data(@model) @model.data.should == @another_model.data end
数据是嵌入式文档,因此在执行此操作时会重复。成功复制模型上的所有属性减去id和created_at日期。我有办法做这样的事吗?
@model.data.attributes.without(:_id, :created_at).should == @another_model.data.attributes.without(:_id, :created_at)
或者反过来选择没有id和created_at的所有其他字段?
谢谢!
答案 0 :(得分:27)
这有效
@model.attributes.except("id", "created_at").should == @another_model.attributes.except("id", "created_at")
答案 1 :(得分:0)
你可以这样做,因为.attributes
返回一个哈希,其中每个键值对都是一个属性及其值。
@model.data.attributes.each do |k,v|
next if k == 'id' || k == 'created_at' # Skip if the key is id or created_at
v.should == @another_model.data.attributes[k]
end