testing my Ruby gem: undefined method `configure' for Shoulda::Matchers:Module (NoMethodError)

I’m working on my first Ruby gem and have bundled cucumber, rspec and shoulda-matches for testing. When I run rspec, I get the following error:

/app/my_gem/spec/spec_helper.rb:6:in `<top (required)>': undefined method `configure' for Shoulda::Matchers:Module (NoMethodError)

Here is my gemspec:

# my_gem.gemspec
...
Gem::Specification.new do |spec|
  ...
  ...
  spec.add_development_dependency "activemodel"
  spec.add_development_dependency "bundler", "~> 1.8"
  spec.add_development_dependency "cucumber"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec" 
  spec.add_development_dependency "shoulda-matchers"
end

My spec_helper.rb:

require 'my_gem'
require 'pry'
require 'shoulda/matchers'

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

    # with.library :active_record
    with.library :active_model
    # with.library :action_controller
    # Or, choose all of the above:
    # with.library :rails
  end
end

It’s finding Shoulda::Matchers but not the .configure method for some reason. Am I requiring shoulda wrong somehow? Not sure if this is related, but the rspec is also giving me this warning:

WARN: Unresolved specs during Gem::Specification.reset:
  json (>= 1.7.7, ~> 1.7)
  minitest (~> 5.1)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.

Thanks for any pointers!

  • Shoulda/RSpec matchers - conditional validation
  • Shoulda rspec matchers :on => :create
  • How to test scopes?
  • Test Driven Development - Should I test database columns and indexes?
  • Shoulda validate_format_of . not_with has problem in framework (or in my understanding)
  • Shoulda: Test validates_presence_of :on => :update
  • How do I get shoulda to recognise my polymorphic association
  • How do you specify POST params in a Rails test?
  • 2 Solutions collect form web for “testing my Ruby gem: undefined method `configure' for Shoulda::Matchers:Module (NoMethodError)”

    It looks like you are trying to use the documentation for the 3.0.0.alpha version of shoulda-matchers which supports 3.0.0.alpha, but are using an older version. Either see the correct documentation for the version you are using (I’m guessing 2.8.x) or update your Gemfile to use 3.0.0.alpha:

    gem 'shoulda-matchers', github: 'thoughtbot/shoulda-matchers'
    

    Then run bundle install and Shoulda::Matchers.configure should start working.

    Git protocol is depreciated, now use:

       gem 'shoulda-matchers', git: 'https://github.com/thoughtbot/shoulda-matchers.git'
    

    (per https://github.com/thoughtbot/shoulda-matchers/issues/719#issuecomment-103556439)

    Ruby is the best programming language in the world - Ruby on Rails.