未初始化的常量Test :: Unit :: TestResult :: TestResultFailureSupport

时间:2009-10-05 13:12:59

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

当我尝试在新的rails项目中运行规范或生成器时,我在subj中收到错误。

当我将mixa添加到混音中时会发生这种情况。

我在config / environment.rb中添加了以下内容:

config.gem 'rspec', :version => '1.2.6', :lib => false
config.gem 'rspec-rails', :version => '1.2.6', :lib => false
config.gem "thoughtbot-shoulda", :version => "2.10.2", :lib => 'shoulda', :source => "http://gems.github.com"

我在OSX上。

  • ruby​​ 1.8.6(2008-08-11 patchlevel 287)
  • gems 1.3.5
  • rails 2.3.4
  • rspec - 1.2.6
  • shoulda - 2.10.2
  • test-unit - 2.0.3

我知道this并且添加config.gem 'test-unit', :lib => 'test/unit'确实解决了生成器问题,因为它没有抛出异常,但它在运行结束时打印0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications所以我假设它试图运行意外和不需要的测试,也就是规格停止运行,似乎rspec根本没有运行,当运行rake spec时我再次获得测试单元输出(0测试为只有规格,没有定义测试)

3 个答案:

答案 0 :(得分:1)

我最近遇到了类似的问题并将其追溯到rubygems中的这个提交:

http://github.com/vvs/rubygems/commit/cbb4b07d491dd49b8dff8ab7af706dde31307c7d

如果它存在,则加载'test-unit'宝石,如果不存在则静默移动。这一变化的作者可能并不知道一个基本的事实 - 激活宝石通常可以改变加载到系统中的其他宝石的行为。应用程序开发人员应负责定义他们想要激活的宝石集; rubygems系统本身决定选择加载宝石是一个令人头疼的问题。

这个问题的另一半是为什么测试单元宝石会干扰rspec的问题。这个我无法回答,但我确实跟踪了没有注册的ExampleGroups这一事实,这反过来是因为当Rspec动态创建一个新的ActiveSupport子类时,不会调用ExampleGroupMethods中的“继承”回调: :TestCase(这发生在ExampleGroupMethods#subclass中)

答案 1 :(得分:1)

根据我发现here的对话,似乎问题并不是RSpec死于所有版本的测试单元,只是它与新版本不兼容。因此,完全卸载测试单元是一种解决方法。但是,如果这不是你的选择(因为它不适合我)你可以安装旧版本(例如1.2.3),并确保在rspec之前加载它。

例如,我在我的environment / test.rb文件中有这个,并且测试再次运行:

config.gem 'test-unit'  , :lib => 'test/unit',  :version => '<2.0'
config.gem "rspec",       :lib => false, :version => '<2.0'
config.gem "rspec-rails", :lib => false, :version => '<2.0'

答案 2 :(得分:0)

测试单元实际上内置于Ruby中,因此删除gem会回退到Ruby的内置版本。除非你需要的东西不包含在默认测试单元中,否则我不会太担心这个。