0

Rails 開発に autotest を使用しようとしています。私のテストを自動的に実行するはずです。

これが私のセットアップです:

$ 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

gem 環境は次のとおりです。

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

これがエラーです。autotest が別のバージョンの 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
4

3 に答える 3

2

次の 2 つのことがわかります。

あなた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を使用して Mac OS および Linux 上の Ruby インストールを管理することを大いに支持しています。/usr/binこれにより、デフォルトのruby​​ に何もインストールする必要がなくなり、わざわざ .ruby に追加する必要さえなくなります/usr/local/bin。RVM にはすべてが含まれて~/.rvmおり、Ruby のバージョンと関連する gem のインストール/管理/削除が非常に簡単になり、そのディレクトリを削除してすべてを吹き飛ばすことさえできます。試してみたい場合は、 RVMGemsetsをインストールすることから始めてください。

于 2010-11-30T01:01:44.137 に答える
1

Rails のサポートは、ZenTest のコアから外れているようです。autotest-railsZenTest 4.0.0 をインストールまたはダウングレードして、再び機能させます。

于 2010-11-30T00:20:32.300 に答える
0

ruby ree-1.8.7 + rbenv で「rbenv: autotest: command not found」というエラーが表示された後、自動テストを機能させるには、次の手順を実行する必要がありました。ただし、autotest の再インストールを繰り返した後でも、/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
于 2013-02-22T19:58:18.077 に答える