2016-09-28 79 views
0

创建一个实例我已经部门标识模型票务和部门与失败与规格

enum name: { dept1: 0, dept2: 1, dept3: 2 } 

我已经播种分贝这三个部门

Department.create(name: :dept1) 
Department.create(name: :dept2) 
Department.create(name: :dept3) 

所以我尝试写规范门票方法

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 

我是一个新的家伙轨,所以请i9f你不介意我解释如何编写这样的规格(与播种DB)。任何建议对我来说都是非常有用的。谢谢!

回答

1

你会想避免种植你的数据库,而是创建你需要为每个测试记录。所以它是由build而不是create产生

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。根据我所看到的,它看起来并不像您需要将ticket保存到数据库以开展此特定测试的开销。

此外,另一个小点......但“惯例”(如果存在这样的事情)是describe实例方法在他们面前散列而不是一个点。 (点表示类方法。)

+0

谢谢你!确实存在对立我很尊敬他们!我错了。 –

+1

不客气。我倾向于忽视公约,直到我终于在晚些时候屈服。 :D –

+0

对此还有一个问题。我认为为test env设置我的种子会更简单。 (在种子中创建一个命名空间或类似的东西?这是一个好主意吗?) –