运行单轨单元/功能测试

时间:2008-11-08 04:14:38

标签: ruby-on-rails unit-testing automated-tests

作为标题。

ruby​​ test / functionals / whatevertest.rb不起作用,这要求我将所有require 'test_helper'替换为require File.dirname(__FILE__) + '/../test_helper'。由于某些原因,大多数测试模板都存在这样的问题,所以我宁愿看看是否存在可以绕过它的黑客攻击。

7 个答案:

答案 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