0

データベースからデータを読み取るRSpecを使用してクラスをテストしています。引数によっては、同じものは返されません。

私の現在の戦略は次のようなものです。

before do
  # create a bunch of data
end

it 'test1' # ...
it 'test2' # ...
it 'test3' # ...

もちろん、これは私のデータが各テストの前に作成されることを意味します。

このファイルのスコープ内で一度データを作成し、データの読み取りを実行できるようにしたいと思います。

ファイルをfalseに設定use_transactional_fixturesし、database_cleanerを使用しようとしましたが、テストの前後にデータベースを再シードする必要があったため、テストが2倍遅くなりました。

rspecに「これらの各テストを同じトランザクションで実行する」ように指示する方法があるかどうか疑問に思いました。

それとも、私はそれを見つけるのに苦労しているので、その種のテストのためのより良い戦略がありますか?

4

1 に答える 1

0

database_cleaner gemを使用するのは正しいことのようですが、私はそれを間違って行っていました。私はクリーニング戦略を切り捨てに設定し、データベースを空にしました...

このGithubの問題について、David Chelimskyは、database_cleanerを使用することがhttps://github.com/dchelimsky/rspec-rails/issues/2に進む方法であると説明しています。

私のテストは次のようになります。

  before(:all) do
    self.use_transactional_fixtures = false

    DatabaseCleaner.strategy = :transaction

    DatabaseCleaner.start
    create_data
  end

  after(:all) do
    DatabaseCleaner.clean
  end

  def create_data
    # create the data...
  end

  it 'test1' # ...
  it 'test2' # ...
  it 'test3' # ...
end

同じテストが、以前の約7秒に対して約3.5秒で実行されるようになりました。私は幸せです :)

編集:前に1つ:すべてで十分です

于 2012-08-27T14:28:14.037 に答える