1,2,4,&,你應該使用交易(或者與use_transactional_fixtures
或交易從database_cleaner寶石支持),如果您使用的是水豚的默認引擎,rack_test。如您所述,使用事務比使用截斷策略要快得多。但是,當數據庫寫入可以通過不同的線程(與硒一樣),事務將不起作用。所以你需要使用截斷(或者強制所有的東西通過一個數據庫線程 - 另一個選項)。
3。是的,你應該使用database_cleaner寶石時,由於創業板原生支持交易關閉use_transactional_fixtures
。如果您只需要事務處理,那麼只需use_transactional_fixtures,而不要加載database_cleaner gem。
5.以下代碼將在運行中在:transaction
和:truncation
之間切換。 (使用RSpec,水豚,Rails3中測試這一點。)
特點這應該給你兩全其美。該速度rack_test
當你不需要測試JavaScript的東西和靈活性selenium
當你這樣做。
而且這個代碼需要在需要它的情況下再植種子數據(這種方法假定您使用seeds.rb來加載種子數據 - 這是當前公約)。
添加以下代碼spec_helper。
config.use_transactional_fixtures = false
RSpec.configure do |config|
config.before(:suite) do
require "#{Rails.root}/db/seeds.rb"
end
config.before :each do
if Capybara.current_driver == :rack_test
DatabaseCleaner.strategy = :transaction
else
DatabaseCleaner.strategy = :truncation
end
DatabaseCleaner.start
end
config.after(:each) do
if Capybara.current_driver == :rack_test
DatabaseCleaner.clean
else
DatabaseCleaner.clean
load "#{Rails.root}/db/seeds.rb"
end
end
end
謝謝Jo Liss指向的方式。
PS:如何切換上飛
上述解決方案假定您已經知道如何切換在飛行駕駛司機。在某些情況下,誰到這裏來不這樣做,方法如下:
如上假設您通常會使用默認的驅動程序水豚rack_test,但需要使用Selenium測試一些東西Ajaxy。當您想要使用硒驅動程序分別使用:js => true
或@javascript
Rspec或黃瓜。例如:
Rspec的例子:
describe "something Ajaxy", :js => true do
黃瓜例如:
@javascript
Scenario: do something Ajaxy
有趣:[燈具v工廠 - 難道我們就不能和平共處?](http://www.metabates.com/2010/08/15/fixtures-v-factories-cant-we-all-只是相處/) – Zabba 2011-03-21 14:02:49