Rspec и наблюдатели в рельсах - PullRequest
0 голосов
/ 20 августа 2011

В настоящее время пишу несколько тестов для моих моделей.У меня есть одна модель, которая называется Блог, когда пользователь создает блог, и наблюдатель публикует сообщение в ленте новостей пользователя.Один из моих тестов проверяет, что это делается.Этот тест, однако, не проходит в среде тестирования, выполнение той же функции в консоли работает безупречно, что приводит меня к мысли, что rspec работает быстро и не ждет, пока наблюдатель закончит свою работу.Есть ли способ обойти это?Я пробовал спать, но это, похоже, не работает.

Это общий дизайн.

Блог создан Обозреватель замечает, создает новый канал новостей и передает новый объект Блог.и он получает правильное сообщение новостной ленты, вызывая метод объекта Blog.Newsfeed добавляет блог в свой список newsfeed_items и сохраняет себя.

Спецификация не выполняется, потому что она не ждет, пока наблюдатель завершит свою задачу, и вызывает его метод after для эффективного удаления объекта, прежде чем объект ленты новостей сможет получить от него сообщение обратно.

1 Ответ

2 голосов
/ 20 августа 2011

Наблюдатели не являются асинхронными (если, конечно, вы не ставите в очередь асинхронную работу в обратном вызове наблюдателя). Сама наблюдаемая модель является отправителем методов обратного вызова. Кажется более вероятным, что ваш наблюдатель не наблюдает в ваших тестах.

Вы сталкивались с этой темой? Может ли это быть полезным?
Как бы вы тестировали наблюдателей с помощью rSpec в приложении Ruby on Rails?

...