私の Rails 4 アプリでは、Course オブジェクトを削除すると関連する Chapter オブジェクトが削除されることをテストしたいと考えています。
そこで、私の Course モデルで、関連付けを次のように定義しました。
has_many :chapters, dependent: :delete_all
これはうまくいきます。ただし、このカスケード削除のテストを作成する方法がわかりません。
私の Rspec テストは次のようになります。
before do
@course = Fabricate(:course)
end
it "deletes associated chapters" do
set_current_admin
chapter1 = Fabricate(:chapter, course_id: @course_id)
delete :destroy, id: @course.id
expect(Chapter.count).to eq(0)
end
Chapter.all が 0 であることを期待しますが、このテストを実行すると、次の結果が得られます。
1) Admin::CoursesController DELETE #destroy deletes associated chapters
Failure/Error: expect(Chapter.all).to eq(0)
expected: 0
got: #<ActiveRecord::Relation [#<Chapter id: 709, title: "omnis corrupti eos et aperiam", description: "Alias sunt tempore aut deserunt. Optio ea assumenda...", course_id: nil, created_at: "2013-11-01 07:10:28", updated_at: "2013-11-01 07:10:28", tagline: "Omnis nemo praesentium corporis. Doloremque dolorib...", badge_image: nil>]>
(compared using ==)
# ./spec/controllers/admin/courses_controller_spec.rb:181:in `block (3 levels) in <top (required)>'
このテストに合格するにはどうすればよいですか?
ご協力いただきありがとうございます、
アンソニー