rspec测试ruby脚本

时间:2012-08-03 11:01:50

标签: ruby rspec

说我们有一个ruby file.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
我的问题:如何在rspec中测试那种stuf?

我的尝试如下。文件运行但不在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

1 个答案:

答案 0 :(得分:1)

Backticks运行新shell,执行命令,并以字符串形式返回结果。这就是为什么它超出你的范围。反引号不关心脚本的内容:ruby,bash或其他东西。

当然,

chdir仅适用于这个新shell,所以似乎无法检查示例脚本是否有目录更改(跟踪系统调用除外)。也许一些“真正的”脚本会做一些事情,输出更多,从而提供更多检查它的可能性。