Почему не работает автотест? - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь использовать автотест для разработки Rails.Он должен запускать мои тесты автоматически.

Вот мои настройки:

$ which ruby
/usr/bin/ruby

$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

$ rails -v
Rails 2.3.9

autotest-rails (4.1.0)
ZenTest (4.4.0)

$ echo $PATH
/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/mysql/bin:/Users/ethan/bin:/opt/local/bin:/usr/local/pgsql/bin:/usr/local/git/bin:/usr/local/oracle/instantclient_10_2

Вот окружение гемов:

RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-10
  - GEM PATHS:
     - /Library/Ruby/Gems/1.8
     - /Users/ethan/.gem/ruby/1.8
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gemcutter.org"]
  - REMOTE SOURCES:
     - http://gemcutter.org

Вот ошибка.Похоже, что автотест пытается использовать какую-то другую версию Ruby.

$ autotest
loading autotest/rails
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -I.:lib:test -rubygems -e "%w[test/unit test/functional/procurements_controller_test.rb].each { |f| require f }" | unit_diff -u
sh: /usr/local/bin/unit_diff: /usr/local/bin/ruby: bad interpreter: No such file or directory
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:108:in `flush': Broken pipe (Errno::EPIPE)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:108:in `output'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:51:in `setup_mediator'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:39:in `start'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in `run'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/autorunner.rb:216:in `run'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/autorunner.rb:12:in `run'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit.rb:278
    from -e:1

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

Я вижу две вещи:

Ваш which ruby говорит, что по умолчанию установлено значение /usr/bin/ruby, но ваш автотест вызывает /usr/local/bin/ruby.

sh: / usr / local / bin / unit_diff: / usr / local / bin / ruby: плохой интерпретатор: такого файла или каталога нет

Кроме того, ваш путь не организован должным образом, поскольку у вас есть дублированные записи. Я разделил его на ':', а затем отсортировал, чтобы найти дубликаты:

/bin
/Library/Frameworks/Python.framework/Versions/Current/bin
/opt/local/bin # <--
/opt/local/bin # <--
/opt/local/sbin
/sbin
/Users/ethan/bin
/usr/bin
/usr/local/bin # <--
/usr/local/bin # <--
/usr/local/git/bin
/usr/local/mysql/bin
/usr/local/oracle/instantclient_10_2
/usr/local/pgsql/bin
/usr/sbin

Обратите внимание, что вы дублировали каталоги /opt/local/bin и /usr/local/bin. Они должны появляться перед каталогом /usr/bin по умолчанию, чтобы ваши «лично» установленные приложения были расположены в первую очередь, поэтому вам следует выполнить некоторые действия по дому. После того, как вы это сделаете, закройте сеанс терминала. Откройте новый сеанс и попробуйте повторно запустить тест и посмотреть, изменилось ли что-либо / улучшилось.

Организация пути является частью проблемы и объясняет, почему which ruby указывает на систему Ruby. Я подозреваю, что другая часть этой головоломки состоит в том, что вы используете #!/usr/local/bin/ruby в качестве «ударной косой черты» в своих сценариях или явно указываете на этот Ruby, когда вызываете вещи из командной строки. Это запутает тесты без конца. В моих скриптах я использую это для вызова Ruby:

#!/usr/bin/env ruby

, который хорошо работает, потому что он использует все, что Ruby определено первым в моем пути, и с этой следующей частью ...

Я большой сторонник использования RVM для управления установками Ruby в Mac OS и Linux. Это позволяет вам не устанавливать ничего в стандартном /usr/bin ruby ​​или даже добавлять его в /usr/local/bin. RVM помещает все в ~/.rvm и позволяет действительно легко устанавливать / управлять / удалять версии Ruby вместе со связанными с ними гемами или даже удалять их, удаляя этот каталог. Установка RVM и Gemsets - хорошие стартовые места, если вы хотите попробовать.

1 голос
/ 30 ноября 2010

Поддержка Rails не в ядре ZenTest. Установите autotest-rails или перейдите на ZenTest 4.0.0, чтобы он снова заработал.

0 голосов
/ 22 февраля 2013

Мне пришлось сделать следующее, чтобы мой автотест заработал после получения следующей ошибки с ruby ​​ree-1.8.7 + rbenv: «rbenv: autotest: команда не найдена», хотя gem сказал, что автотест установлен.Однако двоичный файл в /usr/local/rbenv/versions/ree-1.8.7-2012.02/bin/autotest отсутствовал, даже после повторных переустановок автотеста.

#> gem uninstall ZenTest #all versions
#> gem uninstall autotest autotest-fsevent autotest-growl autotest-rails
#> bundle install

Мой Gemfile:

group :test,:development do
  gem 'factory_girl_rails', '1.0'
  gem 'mocha','~> 0.12.1', :require => false #for mocking data
  gem 'ZenTest', '4.8.2' #DON'T USE 4.8.3 with Rails 3.2!
  gem 'autotest', '~> 4.4.6'
  gem 'autotest-fsevent','~> 0.2.8'
  gem 'autotest-rails', '~> 4.1.2'
  gem 'autotest-growl', '~> 0.2.16'
end
...