2012-05-08 20 views
0

我正在使用Ruby on Rails 3.2.2,FactoryGirl 3.1.0,FactoryGirlRails 3.1.0,Rspec 2.9.0和RspecRails 2.9.0。在我的規格文件(約1300例中的各文件),每個實例運行之前,我使用的工廠種子數據庫,並創建和保存一些記錄:這會減慢我的規格嗎?

# spec/spec_helper.rb 

config.before(:suite) do 
    # Cleans the database. 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner.clean_with(:truncation) 

    # Seeds the database. 
    load "#{Rails.root}/db/seeds.rb" 
end 

我想知道爲什麼,當我運行rspec ./spec/models/my_model_spec.rb命令在終端窗口,我的規格開始迅速但有點後運行(即,它已經運行約300例後)的慢慢。我的例子很簡單,在性能方面幾乎相同:

it "can not update title" do 
    @article.update_attribute(:title, "Sample title").should be_false 
end 

一定數量的測試後,上述這樣的例子採取20/30秒才能完成,有時還60/120秒((!) !)。

運行大約300次後會發生什麼會減慢我的規格的示例如果這些示例非常簡單並且在性能方面幾乎相同?這種行爲有理由嗎?


注我:我試圖運行在隔離規範,而這些都是所有的快。

注二:當我運行規範在我的「活動監視器」(我使用運行雪豹10.6.8的是Mac OS X)一個ruby過程去快速地使用CPU的100%。

+1

嘗試單獨運行緩慢的例子,看看它們是否運行得更慢/更快/相同。這些規格可能會很慢。 –

+0

@Andrew Marshall - 我試圖單獨運行規格,並且都是*快*。 – Backo

+1

測試正在泄漏內存並開始交換? –

回答

0

嘗試在每個示例後清理數據庫。把它放在你的rspec_helper配置塊中:

config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 
+0

看起來沒有區別:它變慢了。 – Backo

相關問題