Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在rspec中测试模型值数组的正确方法是什么?_Ruby On Rails 3_Activerecord_Rspec2 - Fatal编程技术网

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

Ruby on rails 3 在rspec中测试模型值数组的正确方法是什么?,ruby-on-rails-3,activerecord,rspec2,Ruby On Rails 3,Activerecord,Rspec2,我还没有弄清楚rspec编写测试的方法,但是如果能帮助我理解我在这个测试中犯了什么错误,我将不胜感激 describe Source do describe "Upcase name" do names = {'bob' => 'Bob', 'edward jones' => 'Edward Jones' 'Edward jones' => 'Edward Jones'} names.each do |name

我还没有弄清楚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等于所有测试中的最后一个值

基本上,我想要一种干燥的方式来编写测试

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
    ,它们属于
    上下文
  • 不要迭代
    it
    s在
    it
    s中迭代
  • 不要自己清理数据库,使用数据库清理器或事务性装置或类似的东西
看看我是如何编写这些规范的,也许这对您有所帮助: