2010-11-30 48 views
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 

ここでは宝石の環境です:

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 
+0

ポストあなたの$ PATHてください?そして、関係するスクリプト。 –

+0

OK、PATH。 Voila。 – Ethan

+0

'gem env'の出力も追加してください。 Gemsがその環境をどのように考えるかを知る必要があります。 –

答えて

1

レールサポートはZenTestコアのようです。 autotest-railsをインストールするか、ZenTest 4.0.0にダウングレードして再度動作させてください。

+0

これは既知の問題ですか? –

+0

これは既知の機能です。私はまず、部分的な回答を提出しました。私の知識が許す限り、答えは今のところ完全です。 – lbz

+0

お返事ありがとうございます。私は自動テストレールをインストールしました(元の投稿を見てください)。しかし、ZenTest 4.0.0へのダウングレードを試みました。まだ同じエラーが発生しています。 – Ethan

2

私は二つのことを参照してください。

あなたwhich rubyデフォルトは/usr/bin/rubyであると言いますが、あなたのオートテストは/usr/local/bin/rubyを呼んでいます。

SH:は/ usr/local/binに/ unit_diff:は/ usr/local/binに/ルビー:悪い通訳:あなたのためにそのようなファイルやディレクトリはありません

また、あなたのパスがよく組織されていませんエントリが重複しています。私はそれを分割する「:」それは重複を探すためにソート:あなたは/opt/local/bin/usr/local/binディレクトリを複製している

/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 

注意してください。あなたの「個人的に」インストールされたアプリが最初に配置されるためには、デフォルトの/usr/binディレクトリより先に表示されるはずですので、ハウスキーピングを行う必要があります。終了したら、ターミナルセッションを閉じます。新しいセッションを開き、テストを再実行して、何かが変更/改善されているかどうかを確認してください。

パス組織が問題の一部であり、システムのRubyになぜwhich rubyのポイントを説明します。このパズルのもう一つの部分は、あなたのスクリプトの中で#!/usr/local/bin/rubyを "バンスラッシュ"として使用しているか、コマンドラインで物事を呼び出すときにそのRubyを明示的に指し示していることです。それはテストの終わりを混乱させます。私は大きな支持者だ

...

#!/usr/bin/env ruby 

それはRubyのが私のパスで、この次の部分で最初に定義されているものは何でも使用しているため、うまく動作します。私のスクリプトでは、私は、Rubyを呼び出すためにこれを使用しますMac OSとLinuxでRubyのインストールを管理するためにRVMを使用しています。これにより、デフォルトの/usr/binルビーに何かをインストールする必要はなく、/usr/local/binに1つ追加するだけで済むようになります。 RVMはすべてを~/.rvmに置き、関連する宝石と一緒にRubyのバージョンをインストール/管理/削除したり、そのディレクトリを削除することですべてを吹き飛ばすこともとても簡単です。 Installing RVMGemsetsは、試してみたいと思っていれば良いスタート地点です。

+0

助けてくれてありがとう、グレッグ。私は私の道をきれいにした。私は宝石環境の出力を追加しました。再びオートテストを試みた。今、私は「オートテストスタイルのオートテスト/レールは存在しないようです。それが良いか悪いか分からない。 – Ethan

+0

ところで、RVMは素晴らしいと思う。多分私はそれを試してみるでしょう。 – Ethan

0

ruby​​ ree-1.8.7 + rbenvで "rbenv:autotest:command not found"というエラーが表示された後、オートテスト機能が動作するには、以下のようにしなければなりませんでした。自動テストの再インストールを繰り返しても、/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 
関連する問題