我正在運行rails 3.0.3,並使用帶有postgresql數據庫的rspec-rails 2.4.1。每當我運行我的RSpec測試時,數據仍然在最後。有誰知道如何讓rails或rspec在每次使用之間擦除測試環境的數據?rails測試數據庫不會擦除
請告訴我,如果有任何進一步的信息可以使我的問題更容易回答。
謝謝!
Tristan
我正在運行rails 3.0.3,並使用帶有postgresql數據庫的rspec-rails 2.4.1。每當我運行我的RSpec測試時,數據仍然在最後。有誰知道如何讓rails或rspec在每次使用之間擦除測試環境的數據?rails測試數據庫不會擦除
請告訴我,如果有任何進一步的信息可以使我的問題更容易回答。
謝謝!
Tristan
安裝database_cleaner gem,然後將其添加到您的spec_helper.rb。每次測試運行
RSpec.configure do |config|
config.use_transactional_examples = true
end
嘿謝謝鮑比。默認情況下,每次運行rspec時測試數據庫不應該是空的? – WoodenKitty 2011-02-02 02:42:43
使用事務的例子來回滾數據,我只是把我自己通過,使用了錯誤before
塊。
我意外地設置before
塊作爲all
代替each
:
before :all do
user = FactoryGirl.create(:user)
sign_in user
end
這導致user
留下來在數據庫中爲整個rspec
運行,這引起驗證碰撞。
相反,before
應該是一個each
讓一切都通過rspec
運行保持清潔:
before :each do
user = FactoryGirl.create(:user)
sign_in user
end
如果你犯了這個錯誤,那麼你可能需要手動清理你的測試數據庫在事情恢復正常之前。最簡單的方法是截斷每個表(除了schema_migrations
)。
另一種可能性後
Spec::Runner.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
您不需要任何額外的寶石來清理運行之間的測試數據庫。在你的spec_helper.rb文件中,按如下方式配置rspec:
RSpec.configure do |c|
c.around(:each) do |example|
ActiveRecord::Base.connection.transaction do
example.run
raise ActiveRecord::Rollback
end
end
end
我相信在你運行測試之前數據已經被清除了,而不是之後。 – cam 2011-02-01 23:10:08
嘿凸輪。對不起,這可能是正確的,但現在都沒有發生。 – WoodenKitty 2011-02-03 05:17:42