2013-03-06 245 views
8

我正在使用Rails 4.0.0.beta1。我添加了兩個目錄:app/servicestest/servicesrake:測試未在子目錄中運行自定義測試

我還添加了這個代碼,基於閱讀testing.rake of railties

namespace :test do 
    Rake::TestTask.new(services: "test:prepare") do |t| 
    t.libs << "test" 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 

我發現rake test:services運行在test/services測試;但是,rake test不會運行這些測試。它看起來像應該;這裏是code

Rake::TestTask.new(:all) do |t| 
    t.libs << "test" 
    t.pattern = "test/**/*_test.rb" 
end 

難道我忽略的東西嗎?

回答

11

添加這樣的行測試任務定義後:

Rake::Task[:test].enhance { Rake::Task["test:services"].invoke } 

我不知道爲什麼他們沒有得到自動回升,但這是唯一的解決辦法,我發現,對於工作測試::單位。

我想如果你運行rake test:all它會運行你的額外測試,但是rake test本身不會沒有上面的代碼片段。

+0

好一點:'test'和'測試:all'任務是不同的。 – 2013-03-06 22:42:01

+0

回覆:「我不知道他們爲什麼不能自動獲取」 - 我不知道這是故意的,還是僅僅因爲改變而產生的不對稱。所以我添加了[添加測試的所有任務]的註釋(https://github.com/rails/rails/pull/9177#issuecomment-14575192)。 – 2013-03-07 17:46:18

+0

非常感謝,吉姆。 – Ashitaka 2013-11-28 21:53:23

4

對於使用較新的Rails版本的(4.1.0在我的情況)

使用Rails::TestTask代替Rake::TestTask並覆蓋run任務:

namespace :test do 
    task :run => ['test:units', 'test:functionals', 'test:generators', 'test:integration', 'test:services'] 
    Rails::TestTask.new(services: "test:prepare") do |t| 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 
3

吉姆的解決方案有效,但是它最終運行額外的測試套件作爲一個單獨的任務,而不是整體的一部分(至少使用Rails 4.1)。所以測試統計信息運行兩次而不是彙總。我不覺得這是所期望的行爲。

這是我結束了簡單的包含在由rake test,當然執行組任務的新test:extras任務解決這個(使用Rails 4.1.1)

# Add additional test suite definitions to the default test task here 

namespace :test do 
    Rails::TestTask.new(extras: "test:prepare") do |t| 
    t.pattern = 'test/extras/**/*_test.rb' 
    end 
end 

Rake::Task[:test].enhance ['test:extras'] 

這導致準確預期的行爲默認rake。您可以使用這種方法以這種方式添加任意數量的新測試套件。

如果您使用的是Rails 3,我相信只要更改爲Rake::TestTask就可以爲您工作。

3

或者乾脆運行rake test:all

如果你想用默認運行所有測試,覆蓋測試任務:

namespace :test do 
    task run: ['test:all'] 
end