bundle exec rspec spec/requests/static_pages_spec.rb from Hartl's tutorial isn't working

rspec, ruby, ruby-on-rails

Solution

The error message:

in `require': cannot load such file -- zip/zip (LoadError)

is referring to a missing gem called "rubyzip". It should have been installed by bundler along with selenium-web driver, but sometimes these things are not perfect. In this case, the latest version of the "rubyzip" gem has changed library structure, so 'zip/zip' does not exist. Bundler will by default install the latest version, which is why there is no error on install, but there will be an error when you try to run the project, because `selenium-webdriver` dependency lists are not aware of the difference.

Try adding `gem 'rubyzip', '< 1.0.0'` to your test group, and re-run `bundle install`.

The problem appears to be caused by an update to the `rubyzip` gem, see https://github.com/rubyzip/rubyzip

The `selenium-webdriver` gem probably needs updating to reflect those changes - I have logged an issue: https://github.com/vertis/selenium-webdriver/issues/3

Problem

I'm following Michael Hartl's ruby on rails tutorial to test the sample app(3.2.1 Test-driven development), but I'm getting following error after typing `bundle exec rspec spec/requests/static_pages_spec.rb` ``` /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver/common/zipper.rb:1:in `require': cannot load such file -- zip/zip (LoadError) from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver/common/zipper.rb:1:in `<top (required)>' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver/common.rb:9:in `require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver/common.rb:9:in `<top (required)>' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver.rb:29:in `require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver.rb:29:in `<top (required)>' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium-webdriver.rb:1:in `require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/selenium-webdriver-2.0.0/lib/selenium-webdriver.rb:1:in `<top (required)>' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `block (2 levels) in require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `each' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `block in require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `each' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `require' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler.rb:132:in `require' from /home/rahul/Downloads/rails_projects/sample_app/config/application.rb:12:in `<top (required)>' from /home/rahul/Downloads/rails_projects/sample_app/config/environment.rb:2:in `require' from /home/rahul/Downloads/rails_projects/sample_app/config/environment.rb:2:in `<top (required)>' from /home/rahul/Downloads/rails_projects/sample_app/spec/spec_helper.rb:3:in `require' from /home/rahul/Downloads/rails_projects/sample_app/spec/spec_helper.rb:3:in `<top (required)>' from /home/rahul/Downloads/rails_projects/sample_app/spec/requests/static_pages_spec.rb:1:in `require' from /home/rahul/Downloads/rails_projects/sample_app/spec/requests/static_pages_spec.rb:1:in `<top (required)>' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `block in load_spec_files' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `each' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load_spec_files' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/command_line.rb:22:in `run' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:80:in `run' from /home/rahul/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:17:in `block in autorun' ``` Here is the code from `spec/requests/static_pages_spec` file: ``` require 'spec_helper' describe "Static pages" do describe "Home page" do it "should have the content 'Sample App' " do visit '/static_pages/home' expect(page).to have_content('Sample App') end end end ``` `Gemfile`: ``` source 'https://rubygems.org' ruby '2.0.0' #ruby-gemset=railstutorial_rails_4_0 gem 'rails', '4.0.0' group :development, :test do gem 'sqlite3', '1.3.7' gem 'rspec-rails', '2.13.1' end group :test do gem 'selenium-webdriver', '2.0.0' gem 'capybara', '2.1.0' end gem 'sass-rails', '4.0.0' gem 'uglifier', '2.1.1' gem 'coffee-rails', '4.0.0' gem 'jquery-rails', '2.2.1' gem 'turbolinks', '1.1.1' gem 'jbuilder', '1.0.2' group :doc do gem 'sdoc', '0.3.20', require: false end group :production do gem 'pg', '0.15.1' gem 'rails_12factor', '0.0.2' end ``` `routes.rb`: ``` SampleApp::Application.routes.draw do get "static_pages/home" get "static_pages/help" end ``` OS: Ubuntu 13.04 I've been searching for solution, but have not found one. Please keep in mind that I'm new to Ruby on Rails and web development.

Original source