如何从Rails测试套件中运行单个测试?


Answers:


158

注意: 这不会通过进行测试rake。因此,您拥有的任何代码都Rakefile不会执行。

要运行一个测试,请从rails项目的主目录中使用以下命令:

ruby -I test test/unit/my_model_test.rb -n test_name

这将运行一个在指定文件的MyModelTest类中定义的名为“名称”的测试。通过使用测试名称,在其前面加上单词“ test”,然后用下划线将单词分开来形成test_name。例如:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

您可以通过以下两种方式运行两个测试:

ruby -I test test/unit/my_model_test.rb

只是通过第二次测试

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
这对我不起作用(在功能或单元测试上)。我懂了0 tests, 0 assertions, 0 failures, 0 errors。Rails 3.0.7。
B

10
我个人是regex格式的粉丝:-n "/good/"。外壳转义总是很有趣,因此我倾向于坚持使用简单的正则表达式,但比始终写出完整的测试名称要容易得多。
Groxx 2012年

4
重要的是要注意,要使此方法起作用,您不应位于响应中指定的MAIN目录中,而应位于包含该test/文件夹的子目录中。例如,如果我想运行测试,activesupport/test/core_ext/array_ext_test.rb我应该排在activesupport/第一位。
文森特B。12年

3
@Groxx-终于解决了!谢谢!-n "/good/"工作。
B

小心在2018年以上运行此程序。它绕过了Rails内置的一些测试任务(例如db:test:prepare),这些任务用于许多事情,例如将本地数据交换为Fixture数据,然后再次进行恢复。运行此命令炸毁了我的本地数据库。考虑使用内置Rails测试任务的解决方案,例如stackoverflow.com/a/47006811/1154642(对我有用)。
bryanbraun

99

运行一个测试文件

rake test TEST=tests/functional/accounts_test.rb

运行一个单一的测试在测试文件:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(来自@Puhlze的评论。)


10
另外,如果要在给定文件中运行单个测试,则可以添加TESTOPTS环境变量,该变量将传递给测试。EG rake test TEST = tests / functional / accounts_test.rb TESTOPTS =“-n /付费帐户/”
Puhlze 2015年

1
如果后一个测试命令不起作用,请尝试rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"/paid accounts/用单引号引起来)
rrw


38

对于导轨5:

rails test test/models/my_model.rb

9
但这将运行文件中的所有测试用例,该问题要求运行单个测试...
user000001

您可以通过在文件名后附加行号来运行单个测试:bin/rails test test/models/user_test.rb:27
Segfault

29

感谢@James,答案似乎是:

rails test test/models/my_model.rb:22

假定22是给定测试的行号。根据rails帮助:

 $ rails test --help

您可以通过在文件名后附加行号来运行单个测试:

    bin/rails test test/models/user_test.rb:27

另外,请注意,您的测试应继承自ActionDispatch :: IntegrationTest,以使其正常工作(这是我的错误):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
根据Rails指南,这似乎是最好的答案,至少对于测试特定线路而言。
tfantina


5

要在实际的Rails套件中运行一个测试:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb

3

那是我的一个愚蠢的午夜问题。Rails可以打印正在执行的命令rake test。其余的是剪切和粘贴练习。

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"


2

如果要运行单个测试,则可以将它们作为常规Ruby脚本运行

ruby actionmailer/test/mail_layout_test.rb

您还可以通过- cd进入目录并rake test在其中运行,来运行整个套件(例如ActiveRecord或ActionMailer)。


1
不在Rails中-至少没有生成默认的测试文件。他们在第一行上有“ require'test_helper'”,但是加载路径不会及时设置。如果将每行的第一行更改为显式的require(“ require File.join(File.dirname(FILE),'..','test_helper')“)),那么您的解决方案将起作用。
James A. Rosen

哎呀,那是require File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius再次检查。第一个不起作用,但是cd-ing 起作用。只是要清楚一点(我不确定我是否读错了这个,但您确实说过“生成的测试文件”),这是针对Rails库本身的,而不是针对Rails项目的。
2009年

2

就我而言,rake仅适用于TESTOPTS="-n='/sample/'"

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

首先,访问要测试的库的文件夹(这很重要),然后运行:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

Rails文件夹

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

请注意,您需要加载适当的文件夹:“ activerecord / test”(在此处进行测试)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.