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

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

rake test ANYTHING似乎没有帮助。

105077 次浏览

如果你想运行一个测试,你可以只运行它们作为一个普通的 Ruby 脚本

ruby actionmailer/test/mail_layout_test.rb

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

注意: < em > 这不会通过 rake运行测试。所以你在 Rakefile中的任何代码都不会被执行。

若要运行单个测试,请使用 Rails 项目主目录中的以下命令:

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

这将运行一个名为“ name”的测试,该测试在指定文件中的 MyModelTest 类中定义。Test _ name 的形式是: 获取测试名称,在其前面加上单词“ test”,然后用下划线分隔单词。例如:

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

那是我半夜问的蠢问题。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"

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

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

运行 测试文件:

rake test TEST=tests/functional/accounts_test.rb

在测试文件中运行 单项测试:

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

(摘自@Puhlze 的评论)

铁轨5:

rails test test/models/my_model.rb

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

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

最好的方法是直接查看指南: http://guides.rubyonrails.org/contributing_to_ruby_on_rails.html#running-tests

cd actionmailer
bundle exec ruby -w -Itest test/mail_layout_test.rb -n test_explicit_class_layout

铁路5

我使用这种方法来运行单个测试文件(一个文件中的所有测试)

rails test -n /TopicsControllerTest/ -v

另一种选择是使用行号(打印在失败测试下面) :

rails test test/model/my_model.rb:15

多亏了@James,答案似乎是:

rails test test/models/my_model.rb:22

假设22是给定测试的行号:

 $ rails test --help

您可以通过在文件名后面追加一个行号来运行一个测试:

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

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

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

在我的情况下,rake只能工作 TESTOPTS="-n='/your_test_name/'":

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

Rails 文件夹

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

注意,您需要加载适当的文件夹: “ activerrecord/test”(您有测试的地方)

若要重新运行刚刚失败的 测试,请复制-n-粘贴失败的 测试名称

rails test -n [test-name]

例子

当您的测试套件报告以下内容时:

> rails test
...
Error:
PlayersControllerTest#test_should_show_player:
ActionView::Template::Error: no implicit conversion from nil to integer

用这个重新运行失败的测试:

rails test -n PlayersControllerTest#test_should_show_player

如果 rake 正在运行 MiniTest,则选项是 --name而不是 -n

rake test TEST=test/unit/progress_test.rb TESTOPTS="--name=testCreate"