在我的模型,我動態地創建一些方法基於數據庫記錄:測試動態創建的方法
class Job < ActiveRecord::Base
belongs_to :job_status
# Adds #requisition?, #open?, #paused?, #closed?
class_eval do
JobStatus.all.each do |status|
unless method_defined? "#{status.name.downcase}?"
define_method("#{status.name.downcase}?") do
job_status_id == status.id
end
end
end
end
end
class JobStatus < ActiveRecord::Base
has_many :jobs
end
的job_statuses
表包含了一些種子數據,所以不會經常發生變化,但萬一我曾經需要添加新的狀態,我不需要添加更多的代碼來獲取新狀態的布爾方法。
但是,我不知道如何測試這些方法,因爲當rspec的開始job_statuses
表顯然是空的,並創建JobStatus
對象時,Job
被初始化,但由於還沒有對象存在的,它不創建任何方法,並且我的測試失敗,因爲方法不存在。
請注意,我正在使用rspec和spork &後衛,並使用數據庫清理程序和截斷策略(根據Railscast #257,因爲我使用的是Selenium),所以可能會使事情複雜化。