作为标题。
ruby test / functionals / whatevertest.rb不起作用,这要求我将所有require 'test_helper'
替换为require File.dirname(__FILE__) + '/../test_helper'
。由于某些原因,大多数测试模板都存在这样的问题,所以我宁愿看看是否存在可以绕过它的黑客攻击。
答案 0 :(得分:48)
以下答案基于:How to run single test from rails test suite?(stackoverflow)
但非常简短,这就是答案:
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
测试,只需在上面的示例中将functional
替换为unit
。如果您使用 bundler 来管理应用程序的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
是一种便利方法。以下两种方法是等效的:
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
答案 1 :(得分:13)
试试这个:
ruby -Ilib:test test / functionals / whatevertest.rb
答案 2 :(得分:9)
在Linux上?为什么不试试(cd test && ruby functionals/whatevertest.rb)
。注意,括号很重要,否则您当前的目录将更改为子目录。它的作用是fork
另一个shell,更改为其中的子目录,然后运行测试。
答案 3 :(得分:5)
如果您使用的是Rails 4,那么rake支持文件/目录参数。例如:
rake test test/unit/user_test.rb
rake test test/unit
答案 4 :(得分:4)
标题问题的答案是:
ruby unit/post_test.rb -n selected_test # use to run only one selected test
但问题正文tvanfosson给出了一个很好的答案。
答案 5 :(得分:4)
花了无数个小时后,我终于找到了解决方案(在Rails 3.0.7中):
ruby -I test test/functional/users_controller_test.rb -n "/the_test_name/"
注意,这仅适用于命令中的underbars(_)。它不适用于空格!
使用空格定义测试:
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/"
答案 6 :(得分:0)
2和3的最常规方法是:
ruby -I test test / functional / your_test_file.rb