我不想测试两个模型之间的关系。 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对象什么,也许我做的一切都是错误的,我应该用“真实”的对象?谢谢!
更新 这里是模型,其中的变化发生
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
更新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)>'
更新3
原来,当然是不被毁坏。 Course.destroy_all
或course.destroy
都不起作用。无论我是否创建了课程并通过factory_girl注册。怎么会这样?
这将有助于看看你的模型,其中要更改相关的招生工作状态 – usha
我更新了原来的问题,并且增加了模型@Vimsha。 – Linus
你是否在某处存储了销毁方法? – arieljuod