É uma notícia velha, mas você realmente deve desacoplar os testes do modelo dos observadores. Digamos, você tem um observador que faz algo não intimamente relacionado com o que o modelo faz, como enviar uma notificação por e-mail:
class UserObserver < ActiveRecord::Observer
def after_create(user)
Emailer.someone_signed_up(user).deliver
end
end
Uma especificação como esta acionaria o observador todas as vezes:
describe User do
it "should create user with valid attributes" do
user = User.new(email: 'user@me.com', name: 'user')
user.save.should be_true
end
end
Isso falhará se o método de emailer falhar. Você não quer isso. Felizmente, há uma grande joia para o resgate (com um nome um tanto estranho): https://github.com/patmaddox/no-peeping-toms .
Agora, coloque isso no bloco Rspec.configure e pronto:
ActiveRecord::Observer.disable_observers
E se você realmente precisar ter esse observador ligado?
it "should notify founders when someone signs up" do
ActiveRecord::Observer.with_observers(:user_observer) do
User.create(email: 'user@me.com', name: 'user')
ActionMailer::Base.deliveries.should_not be_empty
end
end