10
votes

Test d'une méthode définie dans une tâche de râteau

Je veux tester une méthode définie dans une tâche de râteau.

Fichier Rake P>

#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


1 commentaires

Vous pouvez utiliser défini? (Task_needs_to_run?) # => Vrai .


3 Réponses :


8
votes

Le moyen habituel de le faire est de déplacer tout le code réel dans un module et de laisser la mise en œuvre de la tâche uniquement: xxx

si vous utilisez des variables environnementales ou un argument de commande, il suffit de les transmettre. Dans: xxx

De cette façon, vous pouvez tester et refacturer la mise en œuvre sans toucher la tâche du râteau.


0 commentaires

6
votes

Vous pouvez simplement faire ceci:

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


2 commentaires

Pourriez-vous nous expliquer cela? Je suis désolé je ne pouvais pas suivre


@Shikher, j'ai fait des expériences et j'ai eu une bonne réponse. Regarde!



1
votes

Lorsque vous travaillez dans un projet avec un contexte de rake (quelque chose comme ça) déjà défini:

describe 'my_method(my_method_argument)' do
  include_context 'rake'

  it 'calls my method' do
     expect(described_class.send(:my_method, my_method_argument)).to eq(expected_results)
  end
end


0 commentaires