Ruby on rails 运行单轨装置/功能测试

Ruby on rails 运行单轨装置/功能测试,ruby-on-rails,unit-testing,automated-tests,Ruby On Rails,Unit Testing,Automated Tests,作为标题 ruby test/functionals/whatevertest.rb不起作用,这需要我将所有require'test\u helper'替换为require File.dirname(\uu File\uuu)+'/../test\u helper'。出于某种原因,大多数测试模板都有这样的问题,所以我宁愿看看是否有一种黑客可以绕过它。在Linux上?为什么不试试(cd-test&ruby-functionals/whatevertest.rb)。注意,括号很重要,否则当前目录将更

作为标题


ruby test/functionals/whatevertest.rb不起作用,这需要我将所有
require'test\u helper'
替换为
require File.dirname(\uu File\uuu)+'/../test\u helper'
。出于某种原因,大多数测试模板都有这样的问题,所以我宁愿看看是否有一种黑客可以绕过它。

在Linux上?为什么不试试
(cd-test&ruby-functionals/whatevertest.rb)
。注意,括号很重要,否则当前目录将更改为子目录。它所做的是将另一个shell分叉,更改到其中的子目录,然后运行测试。

尝试以下操作:


ruby-Ilib:test-test/functionals/whatevertest.rb

标题问题的答案是:

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

但是对于问题的主体给出了一个很好的答案。

以下答案基于:(stackoverflow)

但简单地说,答案如下:

ruby -I test test/functional/whatevertest.rb
对于特定的
功能测试
运行:

ruby -I test test/functional/whatevertest.rb -n test_should_get_index
只需在测试名称的空格处加下划线(如上所述),或引用标题如下:

ruby -I test test/functional/whatevertest.rb -n 'test should get index'
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'
注意,对于
单元
测试,只需在上面的示例中将
功能
替换为
单元
。如果您使用bundler管理应用程序的gem依赖项,则必须使用
bundle exec
执行测试,如下所示:

ruby -I test test/functional/whatevertest.rb -n 'test should get index'
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
是一种方便的方法。以下两种方法是等效的:

…并可按以下任一方式执行(它们是等效的):


对于2和3,最常用的方法是:


ruby-I test/functional/your_test_file.rb

在花了无数的时间之后,我终于找到了解决方案(在Rails 3.0.7中):

请注意,这仅适用于命令中的下杆(389;)。它不适用于空间

使用空格将测试定义为:

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/"

如果您使用的是Rails4,那么rake支持文件/目录参数。例如:

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

那是个好主意。我对(cd-test&&ruby-functional/whatsoevertest.rb)做了一点修改,这样它就可以在相对目录结构中正常工作。非常有意义:)我实际上使用ruby-I test test/functional/whatevertest.rb运行它,但结果是一样的。我得到了以下错误:
:29:in
require':没有这样的文件要加载--test\u helper(LoadError)`它能与functional test一起工作吗?谢谢,这很有帮助。标准目录是:test/functional/而不是test/functionals/所以我编辑了你的答案。谢谢。。谢谢你的编辑!我一定是错误地把s放进去了,因为有时我只是通过
bundle exec rake test:functionals执行功能测试,它是复数形式。注意:对于运行所有单元测试也是如此。。只需将
函数
替换为
单元
@b甚至您在Rails 3.0.7中使用的Ruby版本是什么?@b甚至您具体尝试过哪些不起作用的(您说的是“这个”)?我假设您已经尝试了上面的所有内容,在这种情况下,您应该尝试
-n test\u您的测试的\u name\u
,其中
test\u您的测试的\u name\u
是“您的测试的名称”,前面有
test\u
(并用下划线代替空格)。例如,
-n test\u应该创建\u项
@user664833-“这”是
ruby-I test/functional/whatevertest.rb-n selected\u test
ruby-I test/functional/whatevertest.rb-n“selected test w long name”
。预先结束
test\uuz
没有帮助。在所有3种情况下,输出都是“0个测试、0个断言、0个失败、0个错误”。我发现,如果您在模式中转义“空格”,它将起作用。所以类似这样的东西是有效的:ruby-I test test/my_test.rb-n“/do\foo/”出于某种原因,让空间为我工作,我是
ruby-v ruby 1.9.3p484
>Rails::version=>“2.3.18”
可能的重复
rake test test/unit/user_test.rb
rake test test/unit