Я не тестировал связь между двумя моделями. A course has many enrollments, an enrollment has one course.
RSpec с Factory_girl - уничтожить объект
Когда курс уничтожается, все подключенные к нему записи устанавливаются в active = false
. Это работает с реальными объектами, я просто не могу заставить тест работать, потому что независимо от того, что я делаю, курс не уничтожается.
describe Enrollment do
it "deactivates enrollment" do
course = create(:a_course)
user = create_user
enrollment = build(:enrollment)
enrollment.course = course
enrollment.user = user
enrollment.save
# until now everything works as expected
expect { course.destroy }.to change { enrollment.active }.to be_false
# the course isn't being destroyed when calling course.destroy
end
end
Я не мог найти ничего об уничтожении объекта factory_girl в factory_girl документации, может быть, я делаю это все неправильно, и я должен использовать «реальные» объекты? Благодаря!
Update Вот модель, где изменение происходит
class Course < ActiveRecord::Base
attr_accessible ...
has_many :users, through: :enrollments
has_many :enrollments
before_destroy :deactivate_enrollments
protected
def deactivate_enrollments
enrollments = self.enrollments
enrollments.each do |e|
e.active = false
e.save
end
end
end
Как я не совсем уверен, что это, конечно, я использую для тестирования с является объектом factory_girl. Он не создается следующим образом: Course.create...
. Имеет ли объект factory_girl те же методы, что и объект ActiveRecord?
Вот factory_girl
код:
FactoryGirl.define do
factory :course, class: Course do
titel "Course title"
end
end
Update 2 Вот failure message
Enrollment
deactivates enrolment (FAILED - 1)
Failures:
1) Enrollment deactivates enrollment
Failure/Error: expect { course.destroy }.to change(enrollment, :active).from(true).to(false)
active should have been changed to false, but is now true
# ./spec/models/enrollment_spec.rb:18:in `block (2 levels) in <top (required)>'
Update 3
Оказывается, курс не уничтожается. Ни Course.destroy_all
, ни course.destroy
работ. Независимо от того, создаю ли я курс и зачисление с помощью factory_girl или нет. Как это может быть?
Это поможет посмотреть на модели, где вы меняете связанную активное состояние, что процесс регистрации – usha
Я обновил оригинальный вопрос и добавил модель @Vimsha. – Linus
Вы заглушили метод уничтожения где-нибудь? – arieljuod