1

好奇心に口を閉ざしてはいけない。以下は、Rails チュートリアルのコードの一部です。

 describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_selector('h1',    text: user.name) }
    it { should have_selector('title', text: user.name) }
  end

テストが true または false を返した後、ここで作成された Factory オブジェクトはどうなりますか。上記のコードはオブジェクトをデータベースに保存しますが、テストの実行後に自動的にロールバックされるのでしょうか、それとも Rails はオブジェクトに対して何か他のことを行うのでしょうか :PI はちょうど疑問に思っていました。

 $ rails console test
 > User.all

何も返さず、空の配列を返します。

4

1 に答える 1

3

通常、rspec 用に Rails を生成すると、これが spec_helper.rb に配置されます。

  RSpec.configure do |config|
     config.use_transactional_fixtures = true
  end

これは、Rspec がすべてのテストでトランザクションを使用し、後でロールバックすることを意味します。これにより、各テスト間でクリーンなデータベースが得られます。これを false に設定すると、これは行われません。

Factory.create確かにレコードをデータベースに永続化しますが、テストの実行後にロールバックします。そのため、テスト後に記録を探しても、それはもうありません。

一般に、これはベスト プラクティスです。テスト間で依存関係があってはならず、各テストで 1 つのことをテストする必要があるからです。

于 2013-05-26T04:17:23.217 に答える