【问题标题】:running single rails unit/functional test运行单轨单元/功能测试
【发布时间】:2010-09-21 10:06:28
【问题描述】:

作为标题。

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 这很好。我对 (cd test && ruby​​ functional/whatsoevertest.rb) 做了一些更改,因此它可以与相对目录结构一起正常工作。很有道理:)
【解决方案2】:

试试这个:

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

【讨论】:

  • 我实际上是用 ruby​​ -I test test/functional/whatevertest.rb 运行它,但结果是一样的。
【解决方案3】:

标题问题的答案是:

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

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

【讨论】:

  • 我收到以下错误:<internal:lib/rubygems/custom_require>:29:in require': no such file to load -- test_helper (LoadError)` 是否适用于功能测试?
【解决方案4】:

以下答案基于: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

【讨论】:

  • 谢谢,这很有帮助。标准目录是: test/functional/ 而不是 test/functionals/ 所以我编辑了你的答案。谢谢
  • 糟糕.. 感谢您的编辑!我一定是错误地将 s 放在那里,因为有时我只通过 bundle exec rake test:functionals 执行功能测试,这是复数形式。注意:运行所有单元测试时相同。只需将functionals 替换为units
  • @BSeven 你在 Rails 3.0.7 中使用什么版本的 Ruby?
  • @BSeven 你有什么具体的尝试但不起作用(你说“这个”)?我假设您是否尝试过上述所有操作,在这种情况下,您应该尝试-n test_the_name_of_your_test,其中test_the_name_of_your_test 是“您的测试名称”,前面带有test_(并用下划线代替空格)。例如,-n test_should_create_item.
  • @user664833 - “这个”是ruby -I test test/functional/whatevertest.rb -n selected_testruby -I test test/functional/whatevertest.rb -n 'selected test w long name'。前置test_ 没有帮助。在所有 3 种情况下,输出都是`0 个测试,0 个断言,0 个失败,0 个错误`。
【解决方案5】:

2 和 3 最常规的方法是:

ruby -I test test/functional/your_test_file.rb

【讨论】:

    【解决方案6】:

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

    ruby -I test test/functional/users_controller_test.rb -n "/the_test_name/"
    

    注意,这仅适用于命令中的下划线 (_)。它不适用于空格!

    将带有空格的测试定义为:

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

    【讨论】:

    • 我发现如果你在模式中转义“空格”它会起作用。所以像这样有效: ruby​​ -I test test/my_test.rb -n "/do\ foo/"
    • 出于某种原因让这些空间为我工作,我是 ruby -v ruby 1.9.3p484>> Rails::version => "2.3.18"
    【解决方案7】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-09
      • 2015-01-09
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2017-12-28
      相关资源
      最近更新 更多