【发布时间】:2010-01-29 10:15:40
【问题描述】:
我在测试时遇到了这个问题。假设我有两个模型,User 和 Post,其中 user has_many :posts。
我正在尝试指定一个包含以下内容的代码块:
user = User.find(123)
post = user.posts.find(456)
我知道如何模拟出User.find 和user.posts 部分。 user.posts 模拟返回 Post 对象数组。当它到达.find(456) 部分时,一切都会因no block given 异常而崩溃。
所以我的问题是:作为user.posts 模拟的结果,我应该返回什么,以便.find(456) 方法对其起作用? User.first.posts.class 说它是 Array,但显然还有更多的东西可以让 AR 风格的 find 调用起作用。对于在返回的对象上模拟 find 方法的前景,我并不高兴。
PS 在您提出停止嘲笑和使用夹具/为测试数据库播种必要数据的明显而好的答案之前,这里有一个问题:遗留方案。 User 和 Post 都在数据库视图而不是表之上工作,并且将其更改为测试数据库中的表对我来说似乎是错误的。
【问题讨论】:
标签: ruby activerecord rspec mocking