Rspec - 在私有方法中模拟对象

时间:2010-12-31 12:41:22

标签: ruby-on-rails rspec rspec2

在我们的应用程序中,我们为一些感兴趣的域模型编写了after_create / update / delete回调函数。在这些模型中,我们创建了一个新的Audit模型,该模型将已更改模型的必要数据xmlize并将其存储在Audit表中。例如,Consultant模型的after_create回调如下所示:

def after_create
xml = #private xmlize() is called which returns the data of new Consultant object
audit = Audit.new :data=>xml.to_s
audit.save
end

现在,我想模拟审计对象,看看是否使用RSpec调用了save方法。或者甚至更好,如果有办法通过RSpec正则表达xml的内容,我很乐意学习如何通过Ruby in Rails环境来实现。

1 个答案:

答案 0 :(得分:0)

您无法自然地模拟Audit对象,因为它是在方法中构造的。

您可能想要做的是创建和注入(somwhere ...)AuditFactory,并使用它来创建Audit对象。

然后可以模拟工厂和审计,期望模拟工厂创建模拟审计,并调用审计的save方法。

对工厂的期望也可以设置为期望正确的xml。

相关问题