Exécution de tâches Rake dans les tests Rspec

Je suis en train de construire une suite de tests d’intégration et il me faut un peu de logique pour avoir une firebase database propre. Comment puis-je exécuter la tâche db:test:purge dans l’un de mes tests?

J’utilise: ruby ​​1.9.2, rails 3.0.9, rspec 2.6

Vous pouvez appeler les tâches Rake comme suit:

 require 'rake' Rake::Task[name].invoke 

Dans ce cas, cela entraînerait le code suivant:

 require 'rake' Rake::Task['db:test:purge'].invoke 

La réponse approuvée n’a pas fonctionné pour moi, alors que je devais exécuter ma propre tâche de râteau

Voici ma solution

Mettre en haut du fichier de spécifications

 require 'rake' 

Placez ces lignes là où vous devez exécuter votre tâche de rake personnalisée, par exemple rake update_data à partir du fichier example.rake

 load File.expand_path("../../../lib/tasks/example.rake", __FILE__) # make sure you set correct relative path Rake::Task.define_task(:environment) Rake::Task["update_data"].invoke 

Mon environnement:

 rails (4.0.0) ruby (2.0.0p195) rspec-core (2.14.7) rspec-expectations (2.14.3) rspec-mocks (2.14.4) rspec (2.14.1) rspec-rails (2.14.0) 

Si nous avons besoin d’utiliser plusieurs tâches de râteau, nous pouvons append

 require "rake" Rails.application.load_tasks 

Ensuite, appelez simplement n’importe quelle tâche.

 Rake::Task['sync:process_companies'].invoke 

Bien que je ne puisse pas confirmer si c’est plus lent car il charge toutes les tâches

Nous devons également exiger la tâche

 require 'rake' Rake.application.rake_require 'tasks/new_adapter' 

Après cela, appelez simplement la tâche

 Rake::Task['new:adapter'].invoke