Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

undefined method `alias_method_chain' for RSpec::Matchers::BuiltIn::Have:Class (NoMethodError) #1026

Closed
HolyWalley opened this issue Jul 3, 2017 · 7 comments

Comments

@HolyWalley
Copy link

Hi, i'm a beginner in ruby and rails and i study rails with rails tutorial. I have a problem with shoulda-matchers i think. i tried to find answer, but i can't.

when i use:

bundle exec rspec spec/requests/static_pages_spec.rb

i get this error:

/home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers/have_extension.rb:27:in `block in <module:HaveExtensions>': undefined method `alias_method_chain' for RSpec::Matchers::BuiltIn::Have:Class (NoMethodError)
Did you mean?  alias_method
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/concern.rb:120:in `class_eval'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/concern.rb:120:in `append_features'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers/have_extension.rb:34:in `include'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers/have_extension.rb:34:in `block in <top (required)>'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers/have_extension.rb:33:in `class_eval'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers/have_extension.rb:33:in `<top (required)>'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `block in require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:258:in `load_dependency'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers.rb:25:in `<top (required)>'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `block in require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:258:in `load_dependency'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-rails-2.13.1/lib/rspec/rails.rb:12:in `<top (required)>'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `block in require'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:258:in `load_dependency'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.1.2/lib/active_support/dependencies.rb:292:in `require'
	from /home/holywalley/rails_projects/tddtest/spec/spec_helper.rb:4:in `<top (required)>'
	from /home/holywalley/rails_projects/tddtest/spec/requests/static_pages_spec.rb:1:in `require'
	from /home/holywalley/rails_projects/tddtest/spec/requests/static_pages_spec.rb:1:in `<top (required)>'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `block in load_spec_files'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `each'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load_spec_files'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/command_line.rb:22:in `run'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:80:in `run'
	from /home/holywalley/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:17:in `block in autorun'

my Gemfile looks:

source 'https://rubygems.org'
ruby '2.3.1'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '5.1.2'
gem 'railties', '5.1.2'
gem 'rake', '< 11.0'
gem 'activesupport', '5.1.2'
gem 'test-unit', '3.2.5'
gem 'i18n'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'rspec-rails', '2.13.1'
  gem 'listen'
  gem 'shoulda-matchers', require: false
  #gem 'shoulda-matchers', git: 'https://github.com/thoughtbot/shoulda-matchers.git', branch: 'rails-5'
end

group :test do
  gem 'selenium-webdriver', '2.35.1'
  gem 'capybara', '2.1.0'
end

gem 'sass-rails', '5.0.6'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks', '5.0.1'
gem 'jbuilder', '2.7.0'
gem 'sprockets-rails', '3.2.0'

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'pg', '0.21.0'
  gem 'rails_12factor', '0.0.2'
  gem 'sprockets', '3.7.1'
end

static_pages_spec.rb:

require 'spec_helper'

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

if i remove require 'spec_helper' i get this:

F

Failures:

  1) Home page should have the content 'Sample App'
     Failure/Error: visit '/static_pages/home'
     NoMethodError:
       undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x0055bf376dec40>
     # ./spec/requests/static_pages_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.00041 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:4 # Home page should have the content 'Sample App'

sorry if i wrote something bad

@mcmire
Copy link
Collaborator

mcmire commented Jul 4, 2017

Hi @HolyWalley,

This doesn't appear to be a shoulda-matchers issue, but I'll give you an answer anyway.

It looks like you're attempting to use Capybara in a request spec. Typically request specs are used to hit API endpoints that you may have created in your app. They are very similar to controller specs. If you want to use Capybara, I would suggest using a feature spec instead. This is as simple as moving your file from spec/requests to spec/features.

Additionally, it also looks like you're using rspec-rails 2.x. This is an old version of the gem which is no longer maintained. It looks like the latest version is 3.6.0, so I would try upgrading and see if that helps. Please note that you will have to require "rails_helper" instead of require "spec_helper" and you will have to configure shoulda-matchers in your rails_helper as you see in the README.

Post back if you continue to have problems.

@HolyWalley
Copy link
Author

Thank you so much. I did everything you advised and I succeeded. How can i thank you?

@mcmire
Copy link
Collaborator

mcmire commented Jul 25, 2017

@HolyWalley Don't worry about it! I'm just happy that I was able to help you :)

@mcmire mcmire closed this as completed Jul 25, 2017
@Alexxeey
Copy link

Alexxeey commented Aug 31, 2017

I have same problem!I folloowing instructions in your README but don't fix this error

/home/aleksey/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rspec-rails-2.13.1/lib/rspec/rails/matchers/have_extension.rb:27:in `block in <module:HaveExtensions>': undefined method `alias_method_chain' for RSpec::Matchers::BuiltIn::Have:Class
Did you mean?  alias_method (NoMethodError)

My Gemfile look like this:

source 'https://rubygems.org'
ruby '2.4.0'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'rails', '~> 5.1.3'
gem 'puma', '~> 3.7'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'test-unit', '3.2.5'

group :development, :test do
  gem 'rspec-rails', '2.13.1'
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'pg', '0.21.0'
  gem 'rails_12factor'
end

group :test do
  gem 'sqlite3', '1.3.13'
  gem 'shoulda', '~> 3.5.0'
  gem 'shoulda-matchers', '2.8.0'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

And rails_helper look like this:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  config.include Capybara::DSL
end

Shoulda::Matchers.configure do |config|
  config.integrate do |with|
    with.test_framework :rspec
    with.library :rails
  end
end

what should i do???

@mcmire
Copy link
Collaborator

mcmire commented Sep 8, 2017

@Alexxeey I'm not exactly sure why you're getting that error, but try using RSpec 3 and shoulda-matchers 3.

@Alexxeey
Copy link

Alexxeey commented Sep 9, 2017

Thank you @mcmire i already fix this bug.
My rspec tests does not work but when i use feature spec sintax from source https://relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec
#and add require 'capybara/rails' on static_pages_spec.rb file i solve this problem
#also i add gem gem 'shoulda-matchers' , gem 'capybara' in :test group and gem 'factory_girl_rails' in :development, :test group

@mcmire
Copy link
Collaborator

mcmire commented Sep 9, 2017

@Alexxeey Great, glad I could help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants