2

次のようなrubyfile.rbがあるとします。

if __FILE__ == $0 then
  if ARGV[0] == 'foo'
    puts "working"
    # Dir.chdir(../)
    v = Someclass.new
    v.do_something
  end
end

workingファイルがのようにトリガーされた場合にのみ印刷することを想定していますruby file.rb foo
私の質問:その種のstufをrspec内でどのようにテストできますか?

私の試みは以下の通りです。ファイルは実行されましたが、rspecテストの範囲内ではありませんでした。
Dir expected :chdir with (any args) once, but received it 0 times

it 'should work' do
  FILE = File.expand_path('file.rb')
  RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
  @v = Someclass.new
  Someclass.should_receive(:new).and_return @v
  @v.should_receive(:do_something)

  `#{RUBY} #{FILE} foo`
end
4

1 に答える 1

1

バックティックは新しいシェルを実行し、コマンドを実行し、結果を文字列として返します。それがあなたの範囲外で実行される理由です。バックティックは、スクリプトの内容 (ruby、bash、またはその他) を気にしません。

chdirもちろん、この新しいシェルにのみ適用されるため、ディレクトリの変更についてサンプル スクリプトをチェックする方法はないようです (システム コールのトレースを除く)。おそらく、いくつかの「実際の」スクリプトが何かを実行し、より多くを出力するため、それをチェックする可能性が高くなります。

于 2012-08-03T11:21:01.877 に答える