2015-05-09 63 views
1

我有两个实例,它们之间唯一的区别是一个值(完整的)我希望用这样的事情,但它不工作:Rspec的 - 使用.attributes干涸让

let(:section){Section.new(:date => '2015-05-01', :task_id => 1, :trade_id => 1, :schedule_id => 1)} 
let(:complete_section){Section.new(section.attributes, complete: true)} 

当我这样做时,属性从section.attributes设置,但complete: true被忽略。

是否有另一种方法可以从基本部分获取属性:所以我不需要每次都写所有属性?

回答

4

确实

let(:complete_section){Section.new(section.attributes.merge(complete: true))} 

你想要做什么?

+0

是它!这是Rspec 3的新功能吗?当时间限制关闭时,我会标记为已回答。 – fatfrog

+0

'merge'只是普通的Ruby,这不是一个RSpec功能。 –

+0

@AndyWaite说,这只是普通的旧Ruby。属性只是一个散列,所以我们可以合并完成。我也同意安迪,如果我这样做,我会使用工厂女孩(但我会也可以使用traits,所以我会有这样的东西:section,:completed_section等等,我可以在需要时调用 – Doon

1

这一问题的常见方法是FactoryGirl,在那里你可以定义模板,只是覆盖必要的值:

let(:section) { FactoryGirl.build(:section) } 
let(:complete_section) { FactoryGirl.build(:section, complete: true}