我有一个型号Ticket,其中包含department_id,而Department有
enum name: { dept1: 0, dept2: 1, dept3: 2 }
我已经在这三个部门播种了数据库
Department.create(name: :dept1)
Department.create(name: :dept2)
Department.create(name: :dept3)
所以我尝试在Ticket方法上编写规范
def dept
self.department.name.humanize
end
这是一个例子
describe '.dept' do
let!(:ticket){ create :ticket, department_id: Department.first.id }
it 'should return right dept' do
expect(ticket.dept).to eq 'Dept1'
end
end
我收到错误
ActiveRecord::RecordInvalid:
Validation failed: Department can't be blank
我是铁杆的新手,所以请你知道如何编写这样的规格(使用种子数据库)。任何建议对我都非常有用。谢谢!
答案 0 :(得分:1)
您希望不要为数据库播种,而是创建每次测试所需的记录。
describe '#dept' do
let(:department) { create :department, title: 'dept1' }
let(:ticket) { build :ticket, department: department }
it 'should return right dept' do
expect(ticket.dept).to eq 'Dept1'
end
end
请注意,我还更改了ticket
,因此build
而不是create
生成了ticket
。根据我的看法,看起来您需要将describe
持久化到数据库以便运行此特定测试的开销。
另外,另一个小问题......但是"惯例" (如果存在这样的事情)是{{1}} 实例方法,前面有哈希而不是点。 (Dot表示类方法。)