我还没有完全理解 rspec 编写测试的方式,但希望能帮助我理解我在这个测试中做错了什么。
describe Source do
describe "Upcase name" do
names = {'bob' => 'Bob',
'edward jones' => 'Edward Jones'
'Edward jones' => 'Edward Jones'}
names.each do |name,expect|
before { @source = Source.create(name: name) }
after { @source.destroy! }
it "source #{name} should be #{expect}" do
subject { @source }
@source.name.should == expect
let!(:find) do
Source.find_by_proper_name(expect)
end
it "should find" do
should == find
end
end
end
end
end
我对源模型的名称列有唯一约束。
由于独特的违规行为,测试的每次迭代都会失败。(尽管我认为每次迭代只会创建一个模型。
如果我取出这三个名称的中间,那么如果它一次创建所有名称,那么所有名称都是唯一的 - 那么测试失败,因为@source 等于所有测试中的最后一个值。
本质上,我想要一种 DRY 方式来编写测试
Source.create(name: "bob").name.should == "Bob"
Source.create(name: "edward jones").name.should == "Edward Jones"
Source.create(name: "Edward jones").name.should == "Edward Jones"
我应该怎么做?