如何配置RSPEC以显示输出



我有spork运行以加快测试的速度,但是当我运行时没有输出。我需要修改配置吗?

也遇到了这一点,在Spork 1.0.0rc4和RSPEC 2.14.1/rspec-core 2.14.8上运行。据我所知,问题在于以下:

  1. Spork将$ stdout配置为指向Localhost:port(DRB客户端),以便将所有记者输出发送给DRB客户端。现在发生了 spork.prefork run。
  2. 在我的spork.prefork块中,我(自然地)在做rspec.configure do | config |,其中一个config呼叫在那里(尤其是config.mock_with:rr),导致一系列呼叫,最终导致了该调用的顺序rspec.configuration中的记者/格式化器要初始化 - 但没有不正确的stdout。
  3. rspec.configuration具有一个重置方法(标记为 @private但a),它冲洗了初始化的记者/格式化器,可以懒惰地重新定位。
  4. 另外,从未设置rspec.configuration.output_stream。底线,将此代码添加到spork.each_run似乎可以解决该问题:

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

如果有人知道一种更优雅的解决方法,请告诉!

@astgtciv已经回答了这个问题,但是我遇到的是一个相关的事情,对于写作来说太长了:

使用 @astgtciv的修复程序对我有用,但是当我引入自定义格式化器时,它再次破裂。我的猜测是,当Spork Boots初始化了格式化器,因此其输出流在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

更简单的修复方法是仅在此代码块中添加格式化器,但是我认为这可能更快(在测试运行速度方面),而不是风险多次添加同一格式化器。尚未验证该猜测。

最新更新