2016-08-13 18 views
0

以下に書き込めません「聞かせて」ので、私のテストが失敗:RSpecの中で私のデータベースに書き込まれませんデータベース

let(:level_1) { Fabricate(:level, number: 1, points: 100) }  
let(:level_2) { Fabricate(:level, number: 2, points: 200) } 

Level.count # 0 

ただし、以下ではこれは非常に思わ

before do 
    level_1 = Fabricate(:level, points: 100, number: 1) 
    level_2 = Fabricate(:level, points: 200, number: 2) 
end 

Level.count # 2 

動作しません奇妙な。

答えて

3

その理由は、letが遅延ロードされているためです。つまり、level1level2(例の中に)を呼び出すと、ブロックが実行され、レコードが作成されます。回避策は、各例の前に呼び出されるlet!を使用することです。

さて、Level.countは多くのための2

を返します

let!(:level_1) { Fabricate(:level, number: 1, points: 100) }  
let!(:level_2) { Fabricate(:level, number: 2, points: 200) } 

を試してみて、以来作るhttps://www.relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/let-and-let

+0

を参照してください。レベル1を呼び出すと、Level.count == 1?また、私はletを使う必要のないプロジェクトに取り組んだ! dbに送信する。これを行うにはspec_helperで変更できるオプションはありますか? – josh

+0

@josh 'let!'を使うか、 'before'ブロックを定義し、各例の前に' level_1'を呼び出します。 '' ' LEVEL_1 LEVEL_2 エンド行う前に ' '' 例が実行される前に、これは、レコードを作成します。私はストローク数が少ないのでlet 'を好む。 –

関連する問題