[Cucumber] Running single feature from command line


#1

I am using Cucumber 0.2.3 and am having problems running a single
feature. In particular, the cucumber Textmate bundle was not working
so I traced it back and discovered that I could not run single files
or features from the command line either. My setup has the following
line in cucumber.yml

default: -r features/support/env.rb -r features/support/plain.rb -r
features/steps features/plain

When I run just plain cucumber from the command line, all my scenarios
run and all features pass. However, if I try to run the command

cucumber -r features/support/env.rb -r features/support/plain.rb -r
features/steps features/plain

OR

cucumber -r features/support/env.rb -r features/support/plain.rb -r
features/steps features/plain/login.feature

I get

Failed to load features/support/env.rb from /Library/Ruby/Site/1.8/
rubygems/custom_require.rb:31:in polyglot_original_require' from /Library/Ruby/Gems/1.8/gems/polyglot-0.2.5/lib/polyglot.rb:54:inrequire’
from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/
option_parser.rb:144:in invoke_requires' from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/ option_parser.rb:143:ineach’
from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/
option_parser.rb:143:in invoke_requires' from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/ option_parser.rb:104:ininitialize’
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/
ruby/1.8/optparse.rb:1291:in call' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/1.8/optparse.rb:1291:inparse_in_order’
… 31 levels…
from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/…/lib/cucumber/
cli/main.rb:20:in execute' from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/cucumber:6 from /usr/bin/cucumber:19:inload’
from /usr/bin/cucumber:19

I’m assuming the repeated use of the -r flag is not acceptable, but I
need to specify multiple files. How can I get this to work from the
command line so I can also use it in Textmate?

  • Mark

Mark L.
Sabado Technologies


#2

Mark L. wrote:

run and all features pass. However, if I try to run the command

/Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/option_parser.rb:143:in
from
I’m assuming the repeated use of the -r flag is not acceptable, but I
need to specify multiple files.

Cucumber will accept multiple -r or --require. It simply pushes all the
requires onto a stack and requires them all.

Looks like this is a polygot problem. Aslak recently forked and patched
a copy of Treetop to avoid the dependency on this:

git://github.com/aslakhellesoy/treetop.git

I would suggest you try and install treetop from this source and see if
that fixes the problem.

HTH

Joseph W.
http://blog.josephwilk.net


#3

Joseph,

Thanks - treetop did get me past the previous error message. Now, I get

$ cucumber -r features/support/env.rb -r features/support/plain.rb -r
features/steps features/plain
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in
gem_original_require': no such file to load -- features/steps (LoadError) Failed to load features/support/env.rb from /Library/Ruby/Site/1.8/ rubygems/custom_require.rb:31:inrequire’
from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/
option_parser.rb:144:in invoke_requires' from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/ option_parser.rb:143:ineach’
from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/
option_parser.rb:143:in invoke_requires' from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/ option_parser.rb:104:ininitialize’
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/
ruby/1.8/optparse.rb:1291:in call' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/1.8/optparse.rb:1291:inparse_in_order’
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/
ruby/1.8/optparse.rb:1247:in catch' ... 26 levels... from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/ cli/main.rb:20:inexecute’
from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/cucumber:6
from /usr/bin/cucumber:19:in `load’
from /usr/bin/cucumber:19

It seems weird that these exact options work in the cucumber.yml file,
but not from the command line. Any other thoughts?

  • Mark

Mark L.
Sabado Technologies


#4

When I use Aslak’s version of Treetop as Joseph suggested, this does
get rid of the polyglot error. However, I still get the following when
running from the command line:

$ cucumber -r features/steps -r features/support/env.rb features/plain/
user_home_page.feature
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in
gem_original_require': no such file to load -- features/steps (LoadError) Failed to load features/support/env.rb from /Library/Ruby/Site/1.8/ rubygems/custom_require.rb:31:inrequire’
from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/
option_parser.rb:144:in invoke_requires' from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/ option_parser.rb:143:ineach’
from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/
option_parser.rb:143:in invoke_requires' from /Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/ option_parser.rb:104:ininitialize’
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/
ruby/1.8/optparse.rb:1291:in call' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/1.8/optparse.rb:1291:inparse_in_order’
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/
ruby/1.8/optparse.rb:1247:in catch' ... 26 levels... from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/ cli/main.rb:20:inexecute’
from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/cucumber:6
from /usr/bin/cucumber:19:in `load’
from /usr/bin/cucumber:19

Any idea why rspec code is being called here? I did discover that if I
uninstall cucumber 0.2.3 and try version 0.1.16, then the above
command line works as does using the profile. I’m not sure if this
indicates a bug in 0.2.3.

Mark L.
Sabado Technologies


#5

On Tue, Mar 31, 2009 at 5:22 PM, Mark L. removed_email_address@domain.invalid wrote:

/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require’
/Library/Ruby/Gems/1.8/gems/rspec-1.2.2/lib/spec/runner/option_parser.rb:104:in
… 26 levels…
0.2.3.

It’s actually a bug in RSpec that is only triggered in Cucumber 0.2
(bin/cucumber used to consume ARGV, but now leaves it intact, and RSpec
blows up).

https://rspec.lighthouseapp.com/projects/16211/tickets/200
https://rspec.lighthouseapp.com/projects/5645-rspec/tickets/767

Do you have a Rails app? See how Chris F. got around the error in
the
#200 ticket.

Aslak


#6

Mark L. wrote:

Failed to load features/support/env.rb from
from
catch' ... 26 levels... from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/cli/main.rb:20:inexecute’
from /Library/Ruby/Gems/1.8/gems/cucumber-0.2.3/bin/cucumber:6
from /usr/bin/cucumber:19:in `load’
from /usr/bin/cucumber:19

Just a gut feeling but try:

cucumber -r features/steps/ -r features/support/env.rb
features/plain/user_home_page.feature


#7

Aslak,

Thanks! It is nice to at least know where the problem is. I am
actually using Cucumber in a Merb project so the Rails solution does
not help, but I will look for another workaround and post if I find
something.

Mark L.
Sabado Technologies


#8

FYI: I did confirm the problem was the RSpec issue Aslak mentioned. I
did not see a nice solution without messing around with the RSpec gem,
and am I familiar enough with the RSpec code to patch it at this time.
I ended up throwing a constant in my support/env.rb file and testing
for this in the RSpec spec/runner.rb file. Sloppy workaround, but I
needed to move on.

Thanks to Joseph and Aslak for their comments.

Mark L.
Sabado Technologies