在规范中创建实例失败

时间:2016-09-28 21:42:41

标签: ruby-on-rails rspec

我有一个型号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

我是铁杆的新手,所以请你知道如何编写这样的规格(使用种子数据库)。任何建议对我都非常有用。谢谢!

1 个答案:

答案 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表示类方法。)