我不想測試兩個模型之間的關係。 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