0

私の 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)>'

このテストに合格するにはどうすればよいですか?

ご協力いただきありがとうございます、

アンソニー

4

2 に答える 2

0

Chapter.allは ActiveRecord::Relation (Rails 4) のメソッドであり、数値を返しません。

カウントをテストしたいので、使用しますChapter.count

于 2013-11-01T07:58:10.940 に答える