0

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

我目前的策略是这样的:

before do
  # create a bunch of data
end

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

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

我希望能够在此文件的范围内创建一次数据,然后读取数据。

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

我想知道是否有办法告诉 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

现在,相同的测试运行时间约为 3.5 秒,而之前运行时间约为 7 秒。我很开心 :)

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

于 2012-08-27T14:28:14.037 回答