Je suis en train de construire une suite de tests d'intégration et il y a un élément de logique pour lequel j'ai besoin d'une base de données vierge. 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 des tâches Rake comme suit:
require 'rake'
Rake::Task[name].invoke
Dans ce cas, le code suivant serait généré:
require 'rake'
Rake::Task['db:test:purge'].invoke
La réponse approuvée ne fonctionnait pas pour moi, alors que je devais exécuter ma propre tâche de rake
Voici ma solution
Mettre en haut du fichier de spécification
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 devons utiliser plusieurs tâches de rake, nous pouvons ajouter
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 parce qu'il charge toutes les tâches
Nous devons exiger la tâche aussi
require 'rake'
Rake.application.rake_require 'tasks/new_adapter'
Après cela, il suffit d'appeler la tâche
Rake::Task['new:adapter'].invoke