Project

rspec-rake

0.01
No commit activity in last 3 years
No release in over 3 years
RSpec support for testing Rake tasks.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

 Project Readme

RSpec Rake Support

Build Status

You can test you Rake files like you test your Rails app.

This gem adds an example group and configures RSpec so we can write tests for our Rake tasks easily.

Installation

Add this line to your application's Gemfile:

gem 'rspec-rake'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rspec-rake

Usage

Require rspec/rake in your spec_helper.rb

require 'rspec/rake'

And start writing tests in your spec/tasks directory.

Normally RSpec::Rake will detect a task test and will try loading it from your lib/tasks/*.rake directory.

You can manually specify the rake file location and file name by using metadata:

describe 'task:subtask', :rakefile => 'my_task' do
  # Spot the :rakefile metadata value
  # This will tell `RSpec::Test` to load `lib/tasks/my_task.rake`

  it 'does something' do
    task.invoke
  end
end

As you can see the subject of the test is the task with the name from example description. You can also refer to the subject as task.

describe 'task:subtask', :rakefile => 'my_task', :tasks_path => 'lib/capistrano/tasks' do
  # Same with the :tasks_path metadata value
  # This will tell `RSpec::Test` to load `lib/capistrano/task/my_task.rake`
end

Check rails-dummy tests for more examples.

Limitations

Due to how Rake::Application#rake_require works, only files with .rake extension can be tests.

Plagiarism alert

My tentative to provide RSpec support for testing Rake tasks in a convenient and idiomatic way is not new. Previously Thoughtbot and Tyler Hunt wrote about this.

Although I picked a different approach to handle the same problem, it is pretty much the same solution. All I did is tried to put it all together and provide it the way you see it now.

Contributing

  1. Fork it ( http://github.com/stas/rspec-rake/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request