2011-08-20 73 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