在rspec中测试模型值数组的正确方法是什么?



我还没有完全理解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

我对源模型的name列有一个唯一的约束。

由于唯一的冲突,测试的每次迭代都以失败的形式返回。(尽管我认为每次迭代只会创建一个模型。

如果我把三个名字的中间去掉,这样所有的名字都是唯一的,如果它一次创建所有的名字,那么测试就会失败,因为@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"

我该怎么做呢?

你把很多东西混在一起了…

重要的事情先做:

  • 不嵌套it
  • it中不使用let,它们属于context
  • it 中迭代it
  • 不要自己清理数据库,使用数据库清洁器或事务固定装置或类似的东西

看看我是怎么做这些规范的,也许这对你有帮助:https://github.com/phoet/on_ruby/blob/master/spec/models/user_spec.rb#L15

相关内容

  • 没有找到相关文章

最新更新