Ruby 1.9.3破坏了rake test。

14

我有一个现有的Rails 3项目,在Ruby 1.9.2-p290上完全正常运行。然而,升级到Ruby 1.9.3-p0会导致rake test输出以下错误:

/Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:167:in `block in non_options': file not found: test/unit/**/*_test.rb (ArgumentError)
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:146:in `map!'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:146:in `non_options'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:207:in `non_options'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:52:in `process_args'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/minitest/unit.rb:891:in `_run'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/minitest/unit.rb:884:in `run'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:21:in `run'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:326:in `block (2 levels) in autorun'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:27:in `run_once'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:325:in `block in autorun'
/Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:167:in `block in non_options': file not found: test/functional/**/*_test.rb (ArgumentError)
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:146:in `map!'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:146:in `non_options'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:207:in `non_options'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:52:in `process_args'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/minitest/unit.rb:891:in `_run'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/minitest/unit.rb:884:in `run'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:21:in `run'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:326:in `block (2 levels) in autorun'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:27:in `run_once'
from /Users/zmanji/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/test/unit.rb:325:in `block in autorun'

这似乎是由于rake问题引起的后果。但是,当我在Ruby 1.9.3上创建一个简单的Rails项目时,并没有出现这样的错误。我该怎么做才能让我的Rails项目在Ruby 1.9.3上运行?


1
我在我的Gemfile中使用的是Rails 3.1.1。需要注意的是,如果我将rake更改为0.9.3.beta.1,则可以正常工作。但是,不建议在项目中使用beta版本的rake。 - Zameer Manji
你想使用 Ruby x.x.x-p0 吗?通常它比 gem beta 更糟糕。 - phil pirozhkov
使用Ruby 1.9.3相比于1.9.2,对于Rails项目的加速大约为33%。如果我的测试运行速度提高了33%,那么这是值得的。 - Zameer Manji
是的,如果你愿意使用一个语言的0补丁,那么一个稳定宝石的beta版本不应该成为问题。 - WattsInABox
3
强烈反对将 p0/beta gem 与 Ruby 进行比较。Ruby 的发布周期比大多数 gem 更为严格。 - Xavier Shay
显示剩余5条评论
4个回答

9

添加test-unit gem对我有用。


尝试时对我没有任何改变。(目前正在尝试使用最新的 Ruby、补丁级别 1.9.3-p194 是否会有所不同) - Alan H.

6

请分别尝试以下操作:

  1. 使用test.test_files = FileList['test/unit/**/test*.rb']
  2. 移除beta版本的shoulda依赖。
  3. 使用test/unit gem。

1
移除应该已经为我修复了这个问题。 - Ben Wiseley
2
移除shoulda看起来是可以的(加上test-unit也一样),但是由于我仍在使用RSpec,并且需要shoulda,因此我将gem 'shoulda'替换为gem 'shoulda-matchers',这似乎完全可以工作。Thoughtbot的文档确实说只有shoulda-matchers对于RSpec是必要的,而shoulda-context用于“如果您不测试Rails项目或不想使用matchers”。 - Leo

4

shoulda宝石在使用ruby 1.9.3测试环境中的rake时会引起一般性问题,这在此问题中有所报道。

解决方法

您可以使用以下代码:

gem "shoulda", :require => false

在你的 Gemfile 中添加 gem 'factory_bot_rails',然后在你的测试代码中的某个位置(例如,如果你使用的是 test-unit,则为test/test_helper.rb)可以加入以下代码:

require 'shoulda'

如果你正在使用rspec,就不应该使用shoulda gem。相反,你应该使用shoulda-matchers,这不会引起任何问题。


0

我们将我们的rake任务(rake文件)更改为以下内容

require 'rake/testtask'
  ...
desc "Run all tests in folder tests/test*.rb"
Rake::TestTask.new do |t|
  t.libs << "test"
  t.test_files = FileList['tests/test*.rb']
  t.verbose = true
end

基于:http://rake.rubyforge.org/classes/Rake/TestTask.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接