我有spork运行以加快测试的速度,但是当我运行时没有输出。我需要修改配置吗?
也遇到了这一点,在Spork 1.0.0rc4和RSPEC 2.14.1/rspec-core 2.14.8上运行。据我所知,问题在于以下:
- Spork将$ stdout配置为指向Localhost:port(DRB客户端),以便将所有记者输出发送给DRB客户端。现在发生了 spork.prefork run。
- 在我的spork.prefork块中,我(自然地)在做rspec.configure do | config |,其中一个config呼叫在那里(尤其是config.mock_with:rr),导致一系列呼叫,最终导致了该调用的顺序rspec.configuration中的记者/格式化器要初始化 - 但没有不正确的stdout。
- rspec.configuration具有一个重置方法(标记为 @private但a),它冲洗了初始化的记者/格式化器,可以懒惰地重新定位。
-
另外,从未设置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
更简单的修复方法是仅在此代码块中添加格式化器,但是我认为这可能更快(在测试运行速度方面),而不是风险多次添加同一格式化器。尚未验证该猜测。