Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails and MiniTest: add additional folder

I use Ruby 2 and Rails 4. I have a folder test/lib, where a few tests are located. But running rake test does not use them. Only the other tests (models, controllers, ...) are running.

Where do I have to add the lib folder?

I already tried MiniTest::Rails::Testing.default_tasks << 'lib', but I get NameError Exception: uninitialized constant MiniTest::Rails. I did not add the minitest gem to my Gemfile, because Ruby 2 uses it by default.

like image 499
Bjoernsen Avatar asked Sep 19 '13 12:09

Bjoernsen


1 Answers

To use MiniTest::Rails::Testing.default_tasks << 'lib' you need to add the minitest-rails gem to your Gemfile. It is separate from Minitest and adds enables many Minitest features missing that are not enabled in Rails by default. And minitest-rails adds other features, such as creating rake tasks for all the directories that have tests. So without any changes to your Rakefile you can run things like this:

$ rake minitest:lib

Alternatively, to do this the old fashioned way, you can add the following to your Rakefile:

namespace :test do

  desc "Test lib source"
  Rake::TestTask.new(:lib) do |t|    
    t.libs << "test"
    t.pattern = 'test/lib/**/*_test.rb'
    t.verbose = true    
  end

end

Rake::Task[:test].enhance { Rake::Task["test:lib"].invoke }

This assumes you want to run your lib tests without using any database fixtures. If you want the fixtures and database transactions, then you should create the rake task with a dependency on "test:prepare".

namespace :test do

  desc "Test lib source"
  Rake::TestTask.new(:lib => "test:prepare") do |t|    
    t.libs << "test"
    t.pattern = 'test/lib/**/*_test.rb'
    t.verbose = true    
  end

end

Rake::Task[:test].enhance { Rake::Task["test:lib"].invoke }
like image 196
blowmage Avatar answered Oct 07 '22 12:10

blowmage