Search code examples
ruby-on-railsunit-testingtestingrakerake-task

Testing a method defined in a rake task


I want to test a method defined in a rake task.

rake file

#lib/tasks/simple_task.rake
namespace :xyz do
    task :simple_task => :environment do
        begin
            if task_needs_to_run?
                puts "Lets run this..."
                #some code which I don't wish to test
                ...
            end
        end
    end
    def task_needs_to_run?
        # code that needs testing
        return 2 > 1
    end

end

Now, I want to test this method, task_needs_to_run? in a test file How do I do this ?

Additional note: I would ideally want test another private method in the rake task as well... But I can worry about that later.


Solution

  • You can just do this:

    require 'rake'
    load 'simple_task.rake'
    task_needs_to_run?
    => true
    

    I tried this myself... defining a method inside a Rake namespace is the same as defining it at the top level.

    loading a Rakefile doesn't run any of the tasks... it just defines them. So there is no harm in loading your Rakefile inside a test script, so you can test associated methods.