使用RSpec测试相同数据的大量读取的好策略?

时间:2012-08-27 01:39:14

标签: ruby testing rspec

我正在使用RSpec测试一个从数据库中读取数据的类。根据参数,它不会返回相同的内容。

我目前的策略是这样的:

before do
  # create a bunch of data
end

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

这当然意味着我的数据将在每次测试之前创建。

我希望能够在此文件的范围内创建一次数据,并对数据进行读取。

我尝试将use_transactional_fixtures设置为false并使用database_cleaner,但它使我的测试速度慢了两倍,因为我必须在测试之前和之后重新播放我的数据库。

我想知道是否有办法告诉rspec“在同一个交易中运行每个测试”。

或许,既然我很难找到,那么这种测试有更好的策略吗?

1 个答案:

答案 0 :(得分:0)

看起来使用database_cleaner gem是正确的做法,我只是做错了。我已将清理策略设置为截断,清空db ...

在这个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

相同的测试现在运行~3.5s而不是之前的~7s。我很高兴:))

编辑:一个之前:一切都够了