Question

I am trying to run Minitest with Spec syntax with rake test and get this error:

/path/to/gem/spec/script_spec.rb:3:in `<top (required)>': uninitialized constant MyGem (NameError)

My Rakefile:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.test_files = FileList['spec/*_spec.rb']
end

My file structure:

gem/
--lib/
----script.rb
--spec/
----script_spec.rb
--Rakefile

My script.rb:

module MyGem
  class OptionParser
    def self.option?(arg)
      arg =~ /^-{1,2}\w+$/
    end
  end
end

Using Minitest::Spec syntax in script_spec.rb:

require "minitest/autorun"

describe MyGem::OptionParser do
  describe "option?" do
    it "must be true for option name" do
      OptionParser.option?('--nocolor').assert true
    end
  end
end

How do I fix it? Maybe lib folder isn't loaded? Do I miss something related to Spec syntax?

Était-ce utile?

La solution

MyGem::OptionParser is not loaded in your tests. You either need to require it in your spec file or create a spec_helper where you require all files that you need in all your tests so you only need to require 'spec_helper' in your specs.

Also, since you're using the spec syntax, you will have to `require 'minitest/spec'. Your spec_helper would look something like:

# spec/spec_helper.rb
require 'minitest/spec'
require 'minitest/autorun'
require 'script'

And do this to your Rakefile so you can do require 'script' like above in your specs instead of doing require_relative '../lib/script'.

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.test_files = FileList['spec/*_spec.rb']
end

Lastly, for your spec to work, add require 'spec_helper' at the top of your script_spec file. You'll have to do this for all your spec files and make sure to add require for all the files you need to load in your specs to your spec_helper file.

Since you're also doing spec-style testing, you might want to change your test to this:

MyGem::OptionParser.option?('--nocolor').must_equal true

You could also have code like this in your 'spec_helper' file to automatically load all files in your lib folder:

Dir["../lib/**/*.rb"].each do |rb_file|
  require rb_file
end

Hope this helps!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top