繁体   English   中英

当从Ruby脚本作为命令%x [rspec]运行时,如何将RSpec输出到控制台?

[英]How can I make RSpec output to console when run as a command %x[rspec] from Ruby script?

我有一个类使用%x[]表示法运行RSpec的实例方法:

class TestRunner
  def run_rspec
    # do stuff
    %x[rspec spec -c -f documentation]
    # do more stuff
  end
end

当我这样做:

> tr = TestRunner.new
> tr.run_rspec

文档(组名和示例名)未出现在控制台中。

相比之下,当我直接从命令行运行rspec ,会得到以下信息:

$ rspec spec -c -f documentation

  a group name
    an example
    another example
    ...

并不想这样做:

puts %x[rspec spec -c -f documentation

因为这样一来,所有输出最终都会汇成一团。 我希望它能够“实时”运行,每个示例都会在每个测试运行时显示出来。

使用我拥有的设置,是否有办法让RSpec宣布其运行状况(如在命令行中正常运行时所做的一样)?

我被告知system()和其他shell方法可能很危险,所以我选择转向使用RSpec本身的更好的方法:

RSpec::Core::Runner.run(['spec', '-c', '-f', 'documentation'])

而不是从我的Ruby脚本中通过shell调用它。


Ruby提供了几种从命令行运行程序的选项。 我使用的是%x[] ,这是我用例的错误选择。

解决方案:使用system()而不是%x[] -当我使用system('rspec spec')调用rspec它将实时写入STDOUT


一些背景知识,以防偶然发现此问题的任何人:

考虑Ruby的命令行选项之间的差异:

  • %x[command]累积的结果command并返回,在一个组块。
  • exec('command')将在command运行时输出command ,但将替换任何称为它的进程 - 即,如果在Ruby脚本中使用exec ,则Ruby脚本将无法完成。
  • system('command')在子shell中执行command ,并返回到调用脚本。

这就是为什么system是我的脚本的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM