En un modelo de datos mongoide simple con un usuario que tiene muchos comentarios, quiero otorgar al usuario una insignia específica cuando escribe al menos 1 comentario. Así que he creado un observador de esta manera:Cómo probar Mongoid :: Observer con rspec
class CommentBadgeObserver < Mongoid::Observer
observe :comment
def after_create(comment)
CommentBadge.check_conditions_for(comment.user)
end
end
class CommentBadge < Badge
def self.check_conditions_for(user)
if user.comments.size > 1
badge = CommentBadge.create(:title => "Comment badge")
user.award(badge)
end
end
end
El método user.award: (¿pero supongo que es normal porque los observadores se ejecutan en segundo plano)
def award(badge)
self.badges << badge
self.save
end
no pasa la prueba siguiente
¿Cuál es la mejor manera de validar este comportamiento?
Funciona muy bien! Muchas gracias Steve! – obo
Eso es bueno saber y gracias. ¿Lo conseguiste trabajando en tus Rails y fue la instanciación del observador u otra cosa? – Steve
Sí, lo hice trabajando en mi aplicación; Tuve que establecer las dos líneas de la instanciación del observador en mi archivo de especificaciones. – obo