2013-11-01 6 views
0

для моего приложения Rails 4, я хочу проверить, что удаление объекта курса удаляет связанные объекты главы.как проверить каскадное удаление с помощью Rspec

Там, на моей модели курса я определил assiociation следующим образом:

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

Как я могу сделать этот тест проходит?

Спасибо за вашу помощь,

Энтони

ответ

0

Chapter.all является метод ActiveRecord :: Соотношение (Rails 4) и не возвращает номер.

Вы хотели бы, чтобы проверить количество, так что используйте Chapter.count

+0

Я добавлю некоторые объяснения в ответ – gotva

+0

спасибо за помощь gotva. Теперь я использую Chapter.count, но мой тест по-прежнему терпит неудачу, заявив, что он получил 0, но проверен 1 – Toontje

+0

вы могли бы обновить свой код в вопросе – gotva

0

Это не RSpec, но следующее может обеспечить некоторую мотивацию.

test 'authentication - dependent destroy' do 
    user = users(:adam) 
    authentication = user.authentications.first 
    user.destroy 
    assert_nil Authentication.find_by_id(authentication.id) 
end 
Смежные вопросы