2

假设我们有一个 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 中测试这种东西?

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

Backticks 运行新的 shell,执行命令,并将结果作为字符串返回。这就是它在您的范围之外运行的原因。Backticks 不关心脚本的内容:ruby、bash 或其他内容。

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

于 2012-08-03T11:21:01.877 回答