ruby-on-rails - how - test ruby on rails
¿Cómo probar las devoluciones de llamada de ActiveRecord con RSpec? (3)
en primer lugar
Si todo lo que intenta hacer es afirmar que la opción touch: true
está establecida en su asociación, entonces puede hacer lo siguiente:
describe Post do
it { should belong_to(:discussion).touch(true) }
end
En segundo lugar
Para probar las devoluciones de llamada en general, sigue leyendo.
Todas las otras respuestas aquí tienen dos defectos:
Requieren un golpe en la base de datos, que puede ser lento.
¡No determinan a qué devolución de llamada se llama durante un
save!
En su lugar, use Shoulda Callback Matchers , que no requiere un hit de base de datos y puede especificar a qué devolución de llamada está probando la existencia.
Instalación
Instale los Shoulda Callback Matchers con Bundler :
group :test do
gem "shoulda-callback-matchers", "~> 1.0"
end
Uso
it { should callback(:some_method).after(:save) }
Gracias a Beat por escribir esta gran biblioteca.
¿Cómo probar el siguiente ejemplo?
class Post < ActiveRecord::Base
belongs_to :discussion, touch: true
end
Puede establecer una expectativa de mensaje :
it "should touch the discussion" do
post = Factory.build(:post)
post.discussion.should_receive(:touch)
post.save!
end
Este ejemplo usa Factory Girl , pero también podrías usar fixtures o mocks.
Puede simular la llamada #touch, o verificar los efectos de su devolución de llamada.
it "should touch the discussion" do
original_updated_at = @discussion.updated_at
@post.save!
@post.discussion.updated_at.should_not_be == original_updated_at
end