むらたです。

(2011.10.22 11:46 ), 5.5 wrote:
> そして,そのライブラリーの単体テストを書きました。
> 
> そこまではよかったのですが,その単体テストを実行するのに rake を使った
> ところ,$0 が rake のパスになってしまって都合が悪かったのです。
> 
> そこで,テストスクリプト中で $0 を書き換えてやればいいと思ったところ,
> どうも動作が期待と違ったので,調べてみた次第です。
> 
> 
> もし上記のような場合にどのようなやり方がよいのかご教示いただければたい
> へんありがたいです。

$0 に直接依存しないようにプログラムを書けば良いです。
たとえば、以下のように適当なモジュールを用意して、
その中で $0 を返す関数を定義します。

  module Application
    def Application.program_name
      $0
    end
  end

そして、の関数の外で $0 を使用している箇所を
すべて program_name に置き換えましょう。

RSpec では以下のようにすることで、5.5 さんがやろうとしている
パスの置き換えを実現できます。

  describe "..." do
    before do
      Application.stub(:program_name).and_return("/path/to/application")
    end

    ...
  end

-- 
Kenta Murata <muraken / gmail.com>
1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062