次の 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