How can I configure rspec to show output with spork?

北城余情 提交于 2019-11-30 05:34:02

问题


I have spork running to speed up my tests but there is no output when I run them. Is there a configuration that I need to modify?


回答1:


Just ran into this as well, running on spork 1.0.0rc4 and rspec 2.14.1 / rspec-core 2.14.8 . As far as I could figure it out, the problem lies in the following:

  1. Spork configures the $stdout to point to localhost:port (drb client) so that all reporter output is sent to the drb client. This now happens after the Spork.prefork is ran.
  2. In my Spork.prefork block I was (naturally) doing RSpec.configure do |config|, and one of the config calls there (in particular config.mock_with :rr), was causing a sequence of calls that eventually caused the reporter/formatters in RSpec.configuration to be initialized - but without the incorrect stdout.
  3. RSpec.configuration has a reset method (marked as @private but alas), which flushes the initialized reporter/formatters, to be lazily reinitialized.
  4. Also, somehow RSpec.configuration.output_stream is never set. Bottom line, adding this code to Spork.each_run appears to fix the problem:

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

If anyone knows of a more elegant way to solve this, please tell!




回答2:


@astgtciv already answered the question, but here's a related thing I ran into that is too long for writing as a comment:

Using @astgtciv's fix worked for me, but it broke again when I introduced a custom formatter. My guess is that the formatter is initialized when Spork boots, so its output stream is in the DRB server window instead of the test runner window.

My fix was to add attr_accessor :output to my custom formatter, then change the output inside Spork.each_run, e.g:

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

A simpler fix would be to just add the formatter inside this code block, but I thought this might be faster (in terms of test run speed) and not risk adding the same formatter multiple times. Have not verified that guess though.



来源:https://stackoverflow.com/questions/22239382/how-can-i-configure-rspec-to-show-output-with-spork

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!