What I am trying to do is execute an rspec test by hitting a URL
mapped to my JRuby servlet. I get an expected error the first time I
access the URL, but for each URL access after that I get the error
IOError: closed stream
write at org/jruby/RubyIO.java:1322
write at org/jruby/RubyIO.java:2305
puts at org/jruby/RubyIO.java:2260
puts at org/jruby/RubyIO.java:2252
message at C:/jboss…gems/rspec-core-2.5.1/lib/rspec/core/
formatters/base_text_formatter.rb:15
send at org/jruby/RubyKernel.java:2056
notify at C:/jboss…gems/rspec-core-2.5.1/lib/rspec/core/
reporter.rb:75
each at org/jruby/RubyArray.java:1602
notify at C:/jboss…gems/rspec-core-2.5.1/lib/rspec/core/
reporter.rb:74
message at C:/jboss…gems/rspec-core-2.5.1/lib/rspec/core/
reporter.rb:38
announce_exclusion_filter at C:/jboss…gems/rspec-core-2.5.1/lib/
rspec/core/world.rb:77
(root) at :33
which appears to be because rspec does not expect me to be assigning a
new output to reporter on each execution.
Is there a supported way to re-execute rspec multiple times without
restarting my webserver? Or does rspec expect to only be called once?
Note: I am fine (and probably require) making calls to the rspec API
directly, rather than using the command line because it is embedded in
a server.
What I am trying to do is execute an rspec test by hitting a URL
mapped to my JRuby servlet. I get an expected error the first time I
access the URL, but for each URL access after that I get the error
IOError: closed stream
which appears to be because rspec does not expect me to be assigning a
new output to reporter on each execution.
Is there a supported way to re-execute rspec multiple times without
restarting my webserver?
No.
Or does rspec expect to only be called once?
Yes.
RSpec is designed to automate other things, but you are trying to
automate it instead.
Actually, after further review, you can do this (something I never
actually do - except in RSpec’s own suite!):
RSpec::Core::run(options, err, out)
options is an array of command line options (which includes a list of
at least one directory and/or file). Run ‘rspec --help’ to see the
available options.
err is the error stream or file. It can be any IO object.
out is the output stream of file. It can be any IO object.