私たちは、どの程度厳格な分離を望んでいるかによって異なります。
我々はRailsの4でこの例を持っているとしましょう:
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
after_destroy :after_destroy_method
def after_destroy_method
end
end
class Comment < ActiveRecord::Base
belongs_to :post
end
知っているポストのモデルの責任ではありませんので、私はコメントは破壊されます後にどうするか、とにかくいくつかのアイソレーションを使用することをお勧めします。コールバックの正しい動作をテストするには、Commentモデルテストを実行する必要があります。
厳格な分離:
我々は、我々は関係にdependent: :destroy
を適用するならば、Railsはそのジョブを実行し、(それがテストされ、魅力のように働いている)のコールバックを呼び出します知っています。したがって、テストするもの:
- 適切な場所に
dependent: :destroy
を使用します。このために、私たちはこのようにPostモデルのテストでShoulda Matchersを使用することができます。should have_many(:comments).dependent(:destroy)
それほど厳格な分離を:
それはPostモデルのテストでは、統合テストに近づいている:
test "calls #after_destroy_method on the comments after a post gets destroyed" do
post = Post.create title: "Test title"
Comment.create post: post
Comment.any_instance.expects(:after_destroy_method)
post.destroy
end
ああ! '.any_instance'は私がそれを知らずに探していたものです:)それは間違いなく私が必要とした解決策です。これはまっすぐなRailsプロジェクトではなく、宝石のためのものなので、追加のコールバックが起動するか起動しないかをテストすることが重要です。 –