6
Supponiamo che io ho la seguente classe ActiveRecord:C'è un modo pulito per testare i callback di ActiveRecord in Rspec?
class ToastMitten < ActiveRecord::Base
before_save :brush_off_crumbs
end
C'è un modo pulito per verificare che :brush_off_crumbs
è stato impostato come un before_save
richiamata?
Con "pulito" Voglio dire:
- "Senza in realtà il risparmio", perché
- E 'lento
- Non ho bisogno di testare che ActiveRecord correttamente gestisce una direttiva
before_save
; Ho bisogno di testare che ho correttamente detto cosa fare prima di salvare.
- "Senza l'hacking attraverso metodi non documentati"
ho trovato un modo che soddisfa i criteri # 1, ma non # 2:
it "should call have brush_off_crumbs as a before_save callback" do
# undocumented voodoo
before_save_callbacks = ToastMitten._save_callbacks.select do |callback|
callback.kind.eql?(:before)
end
# vile incantations
before_save_callbacks.map(&:raw_filter).should include(:brush_off_crumbs)
end
questo è il modo più elegante che abbia mai visto! molte grazie! – rickypai
C'è qualcosa come "run_callbacks' per i callback dei controller? – Dennis
Per un 'after_save', probabilmente potresti semplicemente inserire' should_receive' all'interno del blocco e restituire true, cioè 'revenue_object.run_callbacks (: save) do; revenue_object.should_receive (: record_financial_changes); vero; fine' –