0

私はまだテストを書く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

ソースモデルの名前列に一意の制約があります。

テストのすべての反復は、固有の違反による失敗として返されます。(反復ごとに1つのモデルしか作成されないと思っていましたが。

3つの真ん中を取り出して、一度にすべてを作成するとすべての名前が一意になるようにすると、@ 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"

どうすればいいですか?

4

1 に答える 1

1

あなたはそこにたくさんのものを混ぜています...

まず最初に:

  • 入れ子にしないでくださいit
  • それらが属するで使用letしないでくださいitcontext
  • itを繰り返さないでくださいit
  • データベースを自分でクリーンアップしないでください。データベースクリーナーやトランザクションフィクスチャなどを使用してください。

私がこれらのようなスペックをどのように行うかを見てください、多分これはどういうわけかあなたを助けます:https ://github.com/phoet/on_ruby/blob/master/spec/models/user_spec.rb#L15

于 2013-01-19T13:55:43.130 に答える