April 26, 2014
In a project we needed to write different parsers for different services. Rather than putting all those parsers in app/models or in lib we created a new directory. We put all the parsers in app/parsers .
We put all the tests for these parsers in test/parsers directory.
We can run tests parsers individually by executing rake test test/parsers/email_parser_test.rb. However when we run rake then tests in test/parsers are not picked up.
We added following code to Rakefile to make rake pickup tests in test/parsers.
# Adding test/parsers directory to rake test.
namespace :test do
desc "Test tests/parsers/* code"
Rails::TestTask.new(parsers: 'test:prepare') do |t|
t.pattern = 'test/parsers/**/*_test.rb'
end
end
Rake::Task['test:run'].enhance ["test:parsers"]
Now when we run rake or rake test then tests under test/parsers are also picked up.
Above code adds a rake task rake test:parsers which would run all tests under test/parsers directory.
We can see this task by execute rake -T test.
$ rake -T test
rake test # Runs test:units, test:functionals, test:integration together
rake test:all # Run tests quickly by merging all types and not resetting db
rake test:all:db # Run tests quickly, but also reset db
rake test:parsers # Test tests/parsers/* code
rake test:recent # Run tests for {:recent=>["test:deprecated", "test:prepare"]} / Deprecated; Test recent changes
If this blog was helpful, check out our full blog archive.