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>.