web-dev-qa-db-fra.com

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

49
xentek

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
54
user290102

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) 
34
Serge Seletskyy

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

9
coderVishal

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
0
Prakriti Gupta