14

所以我正在写一个 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的所有其他字段的其他方式?

谢谢!

4

2 回答 2

38

这有效

@model.attributes.except("id", "created_at").should == @another_model.attributes.except("id", "created_at")
于 2013-10-02T18:52:03.830 回答
0

您可以这样做,因为.attributes返回一个 Hash,其中每个键值对都是一个属性及其值。

@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
于 2013-10-02T18:42:58.780 回答