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
3 Réponses :
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: si vous utilisez des variables environnementales ou un argument de commande, il suffit de les transmettre. Dans: p> De cette façon, vous pouvez tester et refacturer la mise en œuvre sans toucher la tâche du râteau. p> p>
Vous pouvez simplement faire ceci:
require 'rake' load 'simple_task.rake' task_needs_to_run? => true
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!
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
Vous pouvez utiliser
défini? (Task_needs_to_run?) # => Vrai code>.