2008-11-08 85 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