Rails(或Ruby)中未初始化的常量Test :: Unit :: UI :: XML(NameError)

时间:2012-09-30 20:44:48

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

我正在尝试创建一个xml运行器来生成Rails单元测试的结果报告。这是我的代码:

require 'test/unit'
require 'test/unit/ui/console/testrunner'

class FastFailRunner < Test::Unit::UI::Console::TestRunner
  def add_fault(fault)
    @faults << fault
    nl
    output("%3d) %s" % [@faults.length, fault.long_display])
    output("--")
    @already_outputted = true
  end

  def finished(elapsed_time)
    nl
    output("Finished in #{elapsed_time} seconds.")
    nl
    output(@result)
  end
end

Test::Unit::AutoRunner::RUNNERS[:fastfail] = proc do |r|
  FastFailRunner
end

当我以TESTOPTS="/home/alex/RubymineProjects/app2/test/unit/runner.rb --runner=xml" rake test

运行时

...我收到错误(非常奇怪的错误)

/home/alex/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/ext/module.rb:36:in `const_missing': uninitialized constant Test::Unit::UI::XML (NameError)
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/runner/xml.rb:5:in `block in <module:Unit>'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/autorunner.rb:389:in `[]'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/autorunner.rb:389:in `run'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/autorunner.rb:58:in `run'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit.rb:501:in `block in <top (required)>'
gem install minitest
/home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/runner/xml.rb:5:in `block in <module:Unit>': uninitialized constant Test::Unit::UI::XML (NameError)
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/autorunner.rb:389:in `[]'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/autorunner.rb:389:in `run'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit/autorunner.rb:58:in `run'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/test-unit-2.5.2/lib/test/unit.rb:501:in `block in <top (required)>'
Errors running test:units! #<RuntimeError: Command failed with status (1): [/home/alex/.rvm/rubies/ruby-1.9.3-p194/bin...]>
Errors running test:functionals! #<RuntimeError: Command failed with status (1): [/home/alex/.rvm/rubies/ruby-1.9.3-p194/bin...]>

我试图要求test/unit/ui/xml/testrunner.rb,但没有运气。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果你在Ruby 1.8.7中,你可以说:

require 'test/unit/ui/console/testrunner'
p Test::Unit::UI::Console::TestRunner # => no problem

(没有test/unit/ui/xml/testrunner.rb这样的文件,所以我不确定你在那里做什么。)

查看test / unit.rb中的文档,实际上有示例代码向您展示如何执行此操作:http://www.ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html

然而,问题是你在Ruby 1.9.3中。 Ruby 1.9.3中没有/ test / unit!嗯,有,但它只是基本测试的兼容层;肯定没有test / unit / ui / console / testrunner,也没有模块/类Test::Unit::UI::Console::TestRunner

相反,它是最小的。您可以阅读minitest上的文档,了解如何制作测试运行器。 http://docs.seattlerb.org/minitest/

答案 1 :(得分:1)

要考虑的一件事是Test :: Unit包含在默认的Ruby 1.8.7安装中。如果你想在更高版本的Ruby中使用它,那就继续安装它作为gem。

sudo gem install test-unit

http://test-unit.rubyforge.org/