6
は、私は次のActiveRecordクラスがあるとします。RspecでActiveRecordコールバックをテストするきれいな方法はありますか?
class ToastMitten < ActiveRecord::Base
before_save :brush_off_crumbs
end
は:brush_off_crumbs
がbefore_save
コールバックとして設定されていることをテストするためのクリーンな方法はありますか?私が意味する「クリーン」と
:
-
- それは
- 私はActiveRecordのが正しくが
before_save
ディレクティブを扱うことをテストする必要はありませんが遅いですので、「実際には保存しません」。私は正確にそれをテストする必要がありますそれは保存する前にそれを言った。 "文書化されていない方法でハッキングなし"
私は条件#1を満たす方法を見つけなく#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
これは私が見た最もエレガントな方法です!どうもありがとう! – rickypai
コントローラコールバックのための 'run_callbacks'のようなものはありますか? – Dennis
'after_save'の場合、ブロック内に' should_receive'を入れてtrueを返します。すなわち、 'revenue_object.run_callbacks(:save)do; revenue_object.should_receive(:record_financial_changes);真; end' –