说我们有一个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
答案 0 :(得分:1)
Backticks运行新shell,执行命令,并以字符串形式返回结果。这就是为什么它超出你的范围。反引号不关心脚本的内容:ruby,bash或其他东西。
当然, chdir
仅适用于这个新shell,所以似乎无法检查示例脚本是否有目录更改(跟踪系统调用除外)。也许一些“真正的”脚本会做一些事情,输出更多,从而提供更多检查它的可能性。