cavalle / steak

DISCONTINUED - The delicious combination of RSpec and Capybara for Acceptance BDD
MIT License
763 stars 32 forks source link

Untitled #33

Closed henrik closed 13 years ago

henrik commented 13 years ago

After adding steak to a Rails 2.3.10 app, running the tests gave me errors like

10:31:38 henrik@Nyx ~/Sites/example.com[master *]$ rake
(in /Users/henrik/Sites/example.com)
/Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:232:in `activate': You have a nil object when you didn't expect it! (NoMethodError)
You might have expected an instance of Array.
The error occurred while evaluating nil.map
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:258:in `activate'
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:257:in `each'
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:257:in `activate'
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in `require'
        from /Users/henrik/Sites/example.com/vendor/rails/activesupport/lib/active_support/dependencies.rb:184:in `require'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/steak-1.1.0/lib/rspec-2/rails/railtie.rb:2
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require'
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'
        from /Users/henrik/Sites/example.com/vendor/rails/activesupport/lib/active_support/dependencies.rb:184:in `require'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/steak-1.1.0/lib/rspec-2/steak.rb:1
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require'
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'
        from /Users/henrik/Sites/example.com/vendor/rails/activesupport/lib/active_support/dependencies.rb:184:in `require'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/steak-1.1.0/lib/steak.rb:8
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require'
        from /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'
        from /Users/henrik/Sites/example.com/vendor/rails/activesupport/lib/active_support/dependencies.rb:184:in `require'
        from /Users/henrik/Sites/example.com/spec/acceptance/acceptance_helper.rb:2
        from ./spec/acceptance/commissions_spec.rb:1:in `require'
        from ./spec/acceptance/commissions_spec.rb:1
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/lib/spec/runner/example_group_runner.rb:15:in `load'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/lib/spec/runner/example_group_runner.rb:15:in `load_files'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/lib/spec/runner/example_group_runner.rb:14:in `each'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/lib/spec/runner/example_group_runner.rb:14:in `load_files'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/lib/spec/runner/options.rb:134:in `run_examples'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/lib/spec/runner/command_line.rb:9:in `run'
        from /Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/bin/spec:5
rake aborted!
Command /Users/henrik/.rvm/rubies/ree-1.8.7-2010.02/bin/ruby -I"lib"  "/Users/henrik/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-1.3.1/bin/spec" "spec/acceptance/commissions_spec.rb" "spec/models/item_spec.rb" --options "/Users/henrik/Sites/example.com/spec/spec.opts" failed

After poking through that stack trace, it seems the problem is that lib/steak.rb loads rspec 2 instead of rspec 1. This is from my environments/test.rb:

config.gem "rspec", :lib => false, :version => "= 1.3.1"
config.gem "rspec-rails", :lib => false, :version => "= 1.3.3"
config.gem "capybara"
config.gem "steak", :lib => false

And this is output from gem list rspec:

rspec (1.3.1)
rspec-core (2.5.1, 2.3.1)
rspec-expectations (2.5.0, 2.3.0)
rspec-mocks (2.5.0, 2.3.0)
rspec-rails (1.3.3)

Not sure if I did something weird to get rspec-core 2 without rspec 2. It's likely I did, as it worked fine at some point and I got these errors later the same day without changing the app itself.

When I uninstalled rspec-core, the problem went away.

So this may be due to me somehow ending up in a weird state of having only parts of rspec 2 installed.

cavalle commented 13 years ago

This might happen if you have installed both rspec 2 and rspec 1. If present, steak will require rspec 2 before rspec 1.

To workaround this issue I suggest you use bundler or a rvm gemset to avoid having both rspec versions installed.