2

Image オブジェクトのいくつかのテスト用にいくつかのレコードを作成しようとしています。ただし、それらは持続しないようです:

describe Image do
    before(:all) do
      for i in 0..2
        FactoryGirl.create(:image)
      end

      puts Image.count
    end

    it "blah blah blah" do
      puts Image.count
    end

    it "blah blah blah 2" do
      puts Image.count
    end

上記の例では、 への最初の呼び出しImage.countは 3 を返します。後続の呼び出しは 0 を返します。この例は を使用すると機能しますが、実際に必要なものであるべきだとbefore(:each)感じています。before(:all)

4

1 に答える 1

3

before(:all) を使用することはめったにありません。before(:each) を使用したい。before(:all) は context/describe ブロックの開始時に実行され、 before(:each) はその中の各仕様の前に実行されます。これが、2 番目と 3 番目の呼び出しで 0 を取得する理由です。

before(:all) を使用したくないもう 1 つの重要な理由があります。これは、テストを一緒に実行したくないということです。これは、例が結合されることを意味します。これは、テストでは絶対に禁止されています。実際には before(:all) を使用して、例で説明しているものではなく、グローバルな共同作業者を設定する必要があります。

短い答え: before(:each) を使用

于 2013-10-10T20:02:48.847 に答える