2008-11-08 117 views
29

作爲標題。運行單軌機組/功能測試

紅寶石測試/功能/ whatevertest.rb不起作用,這需要我替換所有require 'test_helper'require File.dirname(__FILE__) + '/../test_helper'。由於某些原因,大多數這些測試模板都有這樣的問題,所以我寧願看看是否有黑客可以解決它。

回答

9

在Linux上?爲什麼不試試(cd test && ruby functionals/whatevertest.rb)。請注意,括號非常重要,否則您的當前目錄將更改爲子目錄。它所做的是fork另一個shell,更改爲其中的子目錄,然後運行測試。

+0

這是一個很好的。我改變了一點(CD測試&&紅寶石功能/ whatsoevertest.rb),所以它適用於相對目錄結構。使完美的感覺:) – 2008-11-08 07:58:20

+0

更新與您的修復。 – tvanfosson 2008-11-08 08:02:28

13

試試這個:

紅寶石-Ilib:測試測試/函/ whatevertest.rb

+4

我實際上運行它: 紅寶石 - 我測試測試/功能/ whatevertest.rb 但它最終是同樣的事情。 – Daemin 2010-01-18 15:30:44

4

爲標題問題的答案將是:

ruby unit/post_test.rb -n selected_test # use to run only one selected test 

但問題的體tvanfosson給出了很好的答案。

+0

我得到了以下錯誤:`:29:在'require'中:沒有這樣的文件要加載 - test_helper(LoadError)`它是否適用於功能測試? – 2011-10-06 16:37:52

+0

它應該工作。 – 2012-09-05 10:20:04

48

以下的答案是基於:How to run single test from rails test suite?(計算器)

但是很簡單,這裏的答案:

ruby -I test test/functional/whatevertest.rb 

對於特定functional測試,運行:

ruby -I test test/functional/whatevertest.rb -n test_should_get_index 

只需在測試名稱中的空格處添加下劃線(如上所示),或引用標題如下:

ruby -I test test/functional/whatevertest.rb -n 'test should get index' 

注意,對於unit測試只是在上面的例子中unit更換functional。如果你正在使用打捆來管理應用程序的gem依賴,你必須與bundle exec執行測試如下:

bundle exec ruby -I test test/unit/specific_model_test.rb 
bundle exec ruby -I test test/unit/specific_model_test.rb -n test_divide_by_zero 
bundle exec ruby -I test test/unit/specific_model_test.rb -n 'test divide by zero' 

最重要的,注意參數的-n開關測試的名稱和前綴之前的「測試」一詞,根據是否引用該名稱使用空格或下劃線。原因是test是一種方便的方法。以下兩種方法是等效

test "should get high" do 
    assert true 
end 

def test_should_get_high 
    assert true 
end 

...並且可以作爲下面的任一被執行(它們是當量):

bundle exec ruby -I test test/integration/misc_test.rb -n 'test should get high' 
bundle exec ruby -I test test/integration/misc_test.rb -n test_should_get_high 
0

2最常規的方法和3是:

ruby​​ -I test test/functional/your_test_file。RB

4

願意花無數個小時後,我終於找到了解決辦法(用Rails 3.0.7):在命令

ruby -I test test/functional/users_controller_test.rb -n "/the_test_name/" 

注意,這僅適用於下劃線(_)。它不適用於空格!

定義測試用空間爲:

test "the test name" do 

該解決方案使用模式匹配,這樣你就可以使用測試名稱的一部分。如果測試是「應該做foo」,那麼下面的任何一個都可以。

ruby -I test test/functional/alerts_controller_test.rb -n "/foo/" 
ruby -I test test/functional/alerts_controller_test.rb -n "/do_foo/" 

以下(含空格)將無法​​正常工作

ruby -I test test/functional/alerts_controller_test.rb -n "/do foo/" 
5

如果你是on Rails的4,然後耙支持文件/目錄參數。例如:

rake test test/unit/user_test.rb 
rake test test/unit