2

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

当我将 shoulda 添加到混合物中时,就会发生这种情况。

我在 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 补丁级别 287)
  • 宝石 1.3.5
  • 导轨 2.3.4
  • rspec - 1.2.6
  • 应该 - 2.10.2
  • 测试单元 - 2.0.3

我知道这一点并添加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 个测试,因为只有规范,没有定义测试)

4

3 回答 3

1

我最近遇到了类似的问题,并将其追溯到 ruby​​gems 中的此提交:

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

如果存在则加载“测试单元”gem,如果不存在则静默继续。这种改变的作者可能没有意识到一个基本的事实——激活一个 gem 通常可以改变加载到系统中的其他 gem 的行为。应用程序开发人员应该负责定义他们想要激活的一组 gem;rubygems 系统本身决定选择性地加载 gem 是一个令人头疼的问题。

这个问题的另一半是为什么 test-unit gem 会干扰 rspec 的问题。我无法回答这个问题,但我确实将其追溯到没有注册 ExampleGroups 的事实,这反过来是由于当 Rspec 动态创建 ActiveSupport 的新子类时没有调用 ExampleGroupMethods 中的“继承”回调: :TestCase(这发生在 ExampleGroupMethods#subclass 中)

于 2010-05-14T19:44:19.917 回答
1

根据我在这里找到的对话,似乎问题不在于 RSpec 在所有版本的测试单元中都死了,而在于它与较新的版本不兼容。因此,完全卸载 test-unit 是一种解决方法。但是,如果这不适合您(因为它不适合我),您可以安装旧版本(例如 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'
于 2010-11-28T13:37:31.140 回答
0

test-unit 实际上是内置在 Ruby 中的,因此删除 gem 会退回到 Ruby 的内置版本。除非你需要一些特殊的东西,而这些东西没有包含在默认的测试单元中,否则我不会太担心这个。

于 2009-10-05T15:15:53.183 回答