如何使用Rspec测试级联删除

如何使用Rspec测试级联删除,rspec,rspec-rails,Rspec,Rspec Rails,对于我的Rails 4应用程序,我想测试删除课程对象是否会删除关联的章节对象 在我的课程模型中,我将关联定义如下: has_many :chapters, dependent: :delete_all 这个很好用。但是,我不知道如何为这个级联删除编写测试 我的Rspec测试如下所示: before do @course = Fabricate(:course) end it "deletes associated chapters" do set_current_admin c

对于我的Rails 4应用程序,我想测试删除课程对象是否会删除关联的章节对象

在我的课程模型中,我将关联定义如下:

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)>'
1)管理员::CoursesController删除#销毁删除相关章节
失败/错误:预期(全部章节)。至等式(0)
预期:0
得到:#
(使用==进行比较)
#./spec/controllers/admin/courses\u controllers\u spec.rb:181:in“block(3级)in”
我怎样才能通过这次考试

谢谢你的帮助


Anthony

章。all
是ActiveRecord::Relation(Rails 4)的一种方法,它不返回数字


您希望测试计数,因此请使用
章节。计数

这不是RSpec,但以下内容可能会提供一些动机

test 'authentication - dependent destroy' do
  user = users(:adam)
  authentication = user.authentications.first
  user.destroy
  assert_nil Authentication.find_by_id(authentication.id)
end

我对答案做了一些解释,谢谢你的帮助。我现在使用Chapter.count,但我的测试仍然失败,说它得到了0,但检查了1尝试执行
rake test:prepare
(似乎您还没有清除测试数据库)已经将我的测试数据库与开发同步。运行rakedb:test:再次准备,只是为了确保,但它没有解决问题。我的测试仍然没有通过,说它预期为0,但得到1。在我看来,您构建的参数不正确。您可以在
development.log
test.log
中比较它们的列表,我可以假设参数应该是
course:{id:@course.id}