我正在使用RSpec测试一个从数据库中读取数据的类。根据参数,它不会返回相同的内容。
我目前的策略是这样的:
before do
# create a bunch of data
end
it 'test1' # ...
it 'test2' # ...
it 'test3' # ...
这当然意味着我的数据将在每次测试之前创建。
我希望能够在此文件的范围内创建一次数据,并对数据进行读取。
我尝试将use_transactional_fixtures
设置为false并使用database_cleaner,但它使我的测试速度慢了两倍,因为我必须在测试之前和之后重新播放我的数据库。
我想知道是否有办法告诉rspec“在同一个交易中运行每个测试”。
或许,既然我很难找到,那么这种测试有更好的策略吗?
答案 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。我很高兴:))
编辑:一个之前:一切都够了