Ruby 1.9.3 ломает рейк-тест

У меня есть существующий проект 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'

Похоже, это следствие проблемы с рейком. Однако, когда я создаю простой проект rails на ruby ​​​​1.9.3, возникает такая ошибка. Что я могу сделать, чтобы мой проект rails работал на ruby ​​​​1.9.3?


person Zameer Manji    schedule 31.10.2011    source источник
comment
Какую версию рельсов вы используете в своем Gemfile? Я только что протестировал новое приложение на rails 3.1.1 и ruby ​​1.9.3 p0 - тест rake работает нормально.   -  person Evgenii    schedule 01.11.2011
comment
У меня есть рельсы 3.1.1 в моем Gemfile. Так же следует отметить, что если я меняю рейк на 0.9.3.beta.1, то все работает. Однако нежелательно использовать бета-версию rake в проекте.   -  person Zameer Manji    schedule 01.11.2011
comment
Желательна ли работа с Ruby x.x.x-p0? Обычно это хуже, чем бета-версия драгоценного камня.   -  person phil pirozhkov    schedule 07.11.2011
comment
Ускорение работы с ruby ​​1.9.3 по сравнению с 1.9.2 для проекта rails составляет около 33% с моими проектами. Если мои тесты работают на 33% быстрее, это того стоит.   -  person Zameer Manji    schedule 07.11.2011
comment
Если это так, подумайте также о бета-рейке.   -  person phil pirozhkov    schedule 07.11.2011
comment
Да, если вы хотите использовать патч 0 для языка, то бета-версия стабильного гема не должна быть проблемой.   -  person WattsInABox    schedule 10.11.2011
comment
Как я вижу, вы запускаете пакет test/unit. Ruby 1.9.x извлек тестовый модуль в собственный драгоценный камень. Попробуйте использовать это, возможно, оно уже исправлено для вашей ошибки. test-unit.rubyforge.org   -  person Dalibor Filus    schedule 10.12.2011
comment
Используете ли вы bundle exec при вызове rake? рейк-тест пакета exec   -  person house9    schedule 19.12.2011
comment
Категорически не согласен со сравнением драгоценных камней p0/beta. Цикл выпуска Ruby гораздо более строгий, чем у большинства драгоценных камней.   -  person Xavier Shay    schedule 03.01.2012
comment
Я согласен с @XavierShay здесь, 1.9.3-p0 не является бета-версией или другой предварительной версией. Это полноценная официально выпущенная версия. Уровень исправления отличается от бета-версии, RC или предварительной версии. Был предварительный выпуск и RC-релиз 1.9.3, но 1.9.3-p0 — это релизная версия.   -  person Andrew Marshall    schedule 03.03.2012


Ответы (4)


Добавление драгоценного камня тестового модуля сработало для меня.

person davidkovsky    schedule 02.03.2012
comment
Хм. Никаких изменений для меня, когда я попробовал это. (В настоящее время пытаемся увидеть, имеет ли значение использование последнего ruby, patchlevel, 1.9.3-p194) - person Alan H.; 01.06.2012

Попробуйте следующее (самостоятельно):

  1. Используйте 1_
  2. Удалите shoulda бета-зависимость.
  3. Используйте test/unit драгоценный камень.
person Xavier Shay    schedule 03.01.2012
comment
Удаление должно исправить это для меня - person Ben Wiseley; 21.03.2012
comment
Удаление должно было сработать (как и добавление тестового модуля), но, поскольку я использовал RSpec и все еще нуждался в этом, я заменил gem 'shoulda' на gem 'shoulda-matchers', что, похоже, работает нормально. В документации Thoughtbot сказано, что для RSpec необходимы только сопоставления shoulda, и если вы не тестируете проект Rails или не хотите использовать сопоставители, то используется shoulda-context. - person Leo; 09.04.2012

Гем shoulda вызывает общую проблему при использовании rake в тестовой среде на ruby ​​1.9.3, об этом сообщается в эта проблема.

Обходной путь

Вы можете использовать эту строку

gem "shoulda", :require => false

в вашем Gemfile, а затем где-то в вашем тестовом коде (например, test/test_helper.rb, если вы используете тестовый модуль) вы можете поместить

require 'shoulda'

Если вы используете rspec, вам вообще не следует использовать гем shoulda, вы должны использовать shoulda-matchers, и это не вызовет проблем.

person Jarl    schedule 09.10.2012

Мы изменили нашу 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< /а>

person Tischer    schedule 20.08.2013