在我的模型,我动态地创建一些方法基于数据库记录:测试动态创建的方法
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),所以可能会使事情复杂化。