如何配置rspec以显示spork的输出?

时间:2014-03-07 00:57:30

标签: rspec spork

我有spork运行来加速我的测试但是当我运行时没有输出。是否需要修改配置?

2 个答案:

答案 0 :(得分:7)

刚刚遇到这个问题,在spork 1.0.0rc4和rspec 2.14.1 / rspec-core 2.14.8上运行。据我所知,问题在于:

  1. Spork将$ stdout配置为指向localhost:port(drb客户端),以便将所有报告输出发送到drb客户端。现在,在运行Spork.prefork之后发生了这种情况。
  2. 在我的Spork.prefork块中,我(自然地)正在做RSpec.configure do | config |,其中一个配置调用(特别是config.mock_with:rr)导致一系列调用最终导致RSpec.configuration中的报告/格式化程序要初始化 - 但没有错误的标准输出。
  3. RSpec.configuration有一个重置方法(标记为@private但是唉),它会刷新初始化的报告/格式化程序,以便懒洋洋地重新初始化。
  4. 此外,从不设置RSpec.configuration.output_stream。最重要的是,将此代码添加到Spork.each_run似乎可以解决问题:

    if Spork.using_spork?
        RSpec.configure do |config|
            config.reset
            config.output_stream = $stdout
        end
    end
    
  5. 如果有人知道更优雅的方法来解决这个问题,请告诉我们!

答案 1 :(得分:0)

@astgtciv已经回答了这个问题,但这是我遇到的一个相关的事情,这篇文章作为评论写得太久了:

使用@ astgtciv的修复程序对我有用,但是当我介绍自定义格式化程序时它再次破坏了。我的猜测是,当Spork引导时格式化器被初始化,因此它的输出流在DRB服务器窗口而不是测试运行器窗口。

我的修复是将attr_accessor :output添加到我的自定义格式化程序,然后更改Spork.each_run内的输出,例如:

rspec_formatters = RSpec.configuration.formatters

Spork.each_run do
  if Spork.using_spork?
    RSpec.configure do |config|
      config.output_stream = $stdout
    end

    rspec_formatters.each do |formatter|
      if formatter.respond_to?(:output=)
        formatter.output = $stdout
      end
    end
  end
end

更简单的解决方法是在此代码块中添加格式化程序,但我认为这可能更快(就测试运行速度而言)而且不会冒多次添加相同格式化程序的风险。虽然没有证实这个猜测。