1

仕様に次のコードがあります。

it 'should save some favorite locations' do
  user=FactoryGirl.create(:user)  # not adding anything

データベースには何も書き込まないようです。FactoryGirl は、モデル仕様でこれを使用して何かを記述することを意図していますか? Rails コンソールから実行すると、データベースに追加されます。rspec のテストでこれが実行されないのはなぜですか? それはどのように機能することを意図していますか?

どうも

4

1 に答える 1

6

各テストでデータベース トランザクションを使用するか、データベースの切り捨てを使用するように rspec を構成した場合、作成されたすべてのレコードはロールバックまたは破棄されます。

本当に何かを追加していることを確認するには、次のことを試してください。

it 'should save some favorite locations' do
  user=FactoryGirl.create(:user)  # not adding anything
  User.find(user.id).should_not be_nil # ensure it is in database

合格した場合は、データベースに追加されています。

テストにデータベース トランザクションを使用している場合、データベースは各テストの後にロールバックされます。複数のテストで作成されたレコードを使用する必要がある場合は、次を使用できます。

before(:all) do
  @user=FactoryGirl.create(:user)
end
after(:all) do
  @user.destroy # with create in before(:all), it is not in a transaction
                # meaning it is not rolled back - destroy explicitly to clean up.
end
于 2012-09-01T03:47:00.520 に答える