我成功地测试了ActiveRecord模型的某些属性是否被更新。我还想测试只有这些属性被更改。我希望我可以挂钩到模型的.changes
或.previous_changes
方法,以验证我希望更改的属性是唯一被更改的属性。
更新
寻找与以下内容等效的内容(不起作用):
it "only changes specific properties" do
model.do_change
expect(model.changed - ["name", "age", "address"]).to eq([])
end
字符串
3条答案
按热度按时间p4rjhz4m1#
试试这个
字符串
如果更改不是属性,而是关系,则可能需要重新加载模型:
型
编辑:
在OP评论的一些澄清之后:
到时候你可以这样做
型
这基本上就是你需要的。
但是这个解决方案有一个问题:它会为每个属性调用
method_that_changes_attributes
,这可能效率很低。如果是这种情况-你可能想自己做一个接受方法数组的匹配器。从这里开始tf7tbtn22#
也许这能帮上忙:
字符串
这应该也适用于
.previous_changes
。如果未保存更改,则
.changed
应正常工作。说到底,这实际上取决于
do_change
上的情况irtuqstp3#
在写这篇文章的时候,
字符串
这就是我如何解决@Greg的回答中提到的低效率问题,但是根据要检查的属性的数量,
但请确保为
model.create
分配不同的初始值,并注意updated_at
,它有时会被读取为未更改(忽略部分毫秒)。P.S.如果有人知道如何在一个单一的测试中结合这两个合并,请评论.