2011-08-20 100 views
0

目前正在为我的模型编写一些测试。 我有一个名为Blog的模型,当用户创建博客时,观察者向用户的新闻传递发布消息。 我的一个测试测试了这个过程。然而,这个测试在测试环境中失败了,在控制台中做同样的事情完美无缺,这使我相信rspec正在快速行动,而不是等待观察者完成其任务。任何方式来解决这个问题?我试过睡觉,但似乎没有工作。Rspec和rails中的观察者

这是一般的设计。

博客创建 观察通知书,并创建一个新的新闻源,并通过新的博客对象 新闻馈送上创建被触发,并通过调用博客对象的方法获取正确的新闻推送消息。 新闻推送将该博客添加到其newsfeed_items列表并保存。

该规范将失败,因为它不等待观察员完成任务,它和之后的方法有效地删除新闻源对象之前的对象可以从它那里得到消息回调用它。

+0

曾经推测这一个?我发现观察者挂钩一次,然后再也不会再次... –

回答

2

观察员不是异步的(当然,除非你在你的观察器回调排队异步工作)。观察到的模型本身是回调方法的发送者。您的观察者似乎更有可能在您的测试中没有观察到。

你有没有遇到过这个线程?它可能有用吗?
How would you test observers with rSpec in a Ruby on Rails application?

+0

观察者是观察者,有些模型工作,有些则不工作。它的周围非常奇怪。 – Pallinder