it-swarm.com.de

Ausführen von Rake-Aufgaben in Rspec-Tests

Ich baue eine Integrationstest-Suite auf, und es gibt ein bisschen Logik, für die ich eine saubere Datenbank brauche. Wie kann ich die db:test:purge-Task in einem meiner Tests ausführen?

Ich verwende: Ruby 1.9.2, Rails 3.0.9, rspec 2.6

49
xentek

Sie können Rake-Aufgaben wie folgt aufrufen:

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

In diesem Fall würde dies den folgenden Code ergeben:

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

Die genehmigte Antwort funktionierte nicht für mich, als ich meine eigene Rake-Aufgabe ausführen musste

Hier ist meine Lösung

Oben in die Spezifikationsdatei einfügen

require 'rake'

Platzieren Sie diese Zeilen dort, wo Sie Ihre benutzerdefinierte Rake-Aufgabe ausführen müssen, z. rake update_data aus der Datei 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

Meine Umgebung: 

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

Wenn wir mehrere Rake-Aufgaben verwenden müssen, können wir hinzufügen 

require "rake"
Rails.application.load_tasks

Dann rufen Sie einfach eine beliebige Aufgabe an.

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

Ich kann nicht bestätigen, ob es langsamer ist, weil es alle Aufgaben lädt

9
coderVishal

Wir müssen auch die Aufgabe verlangen

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

Danach rufen Sie einfach die Aufgabe auf

Rake::Task['new:adapter'].invoke
0
Prakriti Gupta