test_helper test rails how asserts ruby-on-rails activerecord rspec callback

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:

  1. Requieren un golpe en la base de datos, que puede ser lento.

  2. ¡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