3
votes

I am learning how to do integration testing on a simple app in Rails using Capybara.

However I got an error when running 'rspec spec':

bundle exec rspec spec
/home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/dsl.rb:1: warning: loading in progress, circular require considered harmful - /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara.rb
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `<main>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rspec:23:in `<main>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rspec:23:in `load'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/exe/rspec:4:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:38:in `invoke'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:70:in `run'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:85:in `run'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:96:in `setup'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:22:in `configure'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:100:in `process_options_into'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:100:in `each'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:101:in `block in process_options_into'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `requires='
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `each'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `block in requires='
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `require'
    from /home/alex/git-projects/rails-projects/qotd2/spec/spec_helper.rb:6:in `<top (required)>'
    from /home/alex/git-projects/rails-projects/qotd2/spec/spec_helper.rb:6:in `require'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/rails.rb:1:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/rails.rb:1:in `require'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara.rb:5:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara.rb:320:in `<module:Capybara>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara.rb:320:in `require'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/dsl.rb:1:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/dsl.rb:1:in `require'
/home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/node/matchers.rb:121: warning: assigned but unused variable - e
/home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/selenium/driver.rb:119: warning: assigned but unused variable - a
/home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/rails.rb:6:in `block (2 levels) in <top (required)>': uninitialized constant Rails (NameError)
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:145:in `new'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:145:in `block in generate_map'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:145:in `each'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:145:in `generate_map'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rack-1.5.2/lib/rack/builder.rb:132:in `to_app'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/capybara-2.3.0/lib/capybara/rails.rb:13:in `<top (required)>'
    from /home/alex/git-projects/rails-projects/qotd2/spec/spec_helper.rb:6:in `require'
    from /home/alex/git-projects/rails-projects/qotd2/spec/spec_helper.rb:6:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `require'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `block in requires='
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `each'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration.rb:1018:in `requires='
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:101:in `block in process_options_into'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:100:in `each'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:100:in `process_options_into'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/configuration_options.rb:22:in `configure'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:96:in `setup'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:85:in `run'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:70:in `run'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/lib/rspec/core/runner.rb:38:in `invoke'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/rspec-core-3.0.0/exe/rspec:4:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rspec:23:in `load'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rspec:23:in `<main>'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'
    from /home/alex/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `<main>'

My Gemfile (partial):

group :test do
    gem 'fake'
    gem 'capybara'
    gem 'database_cleaner'
    gem 'launchy'
end

group :development, :test do
    gem 'rspec-rails'
    gem 'factory_girl_rails'
    gem 'guard-rspec'
    gem 'growl'
    gem 'dotenv-rails'
end

My test case (location: /spec/features/users_spec.rb):

require 'spec_helper'

describe 'User authentication' do 
    context 'new user signs up' do
        it "saves the new user" do 
            visit "/"
            expect {
                click_button 'Sign up'
                fill_in 'Name', with: 'alexjiao'
                fill_in 'Email', with: "[email protected]"
                fill_in 'Password', with: 'asdfasdf'
                fill_in 'Password confirmation', with: 'asdfasdf'
                click_button 'Create my account'
            }.to change(User, :count).by(1)
        end
    end

end

My spec_helper.rb (location: /spec/spec_helper.rb):

require 'capybara/rails'
require 'capybara/rspec'

RSpec.configure do |config|
  config.include Capybara::DSL
end

Several solutions such as putting test case in features folder and creating a config statement for capybara DSL are all here. But I can't seem to get capybara working. Seems that my situation is a bit unique especially with the error message above. One thing to take note of is that after running rails g rspec:install, my spec_helper.rb is empty (is that normal?). Hence this accounts for its terse code above.

Any thoughts?

3
Try uninstalling all the gems in your test and development environment and then running bundle install - dax
you don't need to include Capybara::DSL. - sevenseacat

3 Answers

0
votes

I had a similar problem. Using just

require 'capybara'

in my spec_helper.rb file instead of

require 'capybara/rails'
require 'capybara/rspec'

got past the "uninitialized constant Rails (NameError)".

I still got the warning about the circular require, but the test ran correctly.

*EDIT*
I had to add:

--require spec_helper
--require rails_helper

in the .rspec file in the project directory as well to get the test finally running right (RSpec 3.0).

0
votes

@mkmadd's answer solved my problem with this. I would also recommend following Romanwv's tip and remove --warnings from .rspec to save yourself some headaches.