2011-08-01 18 views
47

Entegrasyon testi paketi oluşturuyorum ve temiz bir veritabanına sahip olmamız gereken bir tane mantık var. Testlerimden birinin içinde db:test:purge görevini nasıl çalıştırabilirim?Rspec Tests'de Rake görevleri çalıştırılıyor

kullanıyorum: yakut 1.9.2, 3.0.9 raylar, RSpec 2.6

+0

: http://stackoverflow.com/questions/3530/how-do-i-rake-tasks-within -a-ruby-script –

cevap

51

Sen Rake görevleri çağırabilir aşağıdaki gibidir: Bu aşağıdaki kodda neden olacaktır Bu durumda

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

:

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

Bunu yaptı. Teşekkürler. Ayrıca, ilk başta beni attıran yanlış işin adı da vardı. Rails 3'te, rake testi: Hazırlık hilesi – xentek

+1

@jim iyi bir nokta yapmak gibi görünüyordu. Bu örneklerde Rake::Task[name].execute'u kullanabilirsiniz, ancak bu yöntemle görevi çağırırken çalıştırılmadıklarından, bağımlılıklarından (ör. "ortam") herhangi birini karşıladığınızdan emin olmanız gerekir. – xentek

+0

Bu yardımcı oldu. Biri yukarıdaki parametrelere nasıl geçiş yapar? – n8gard

32
kendi tırmık görev yürütmek için gerektiğinde

Onaylı cevap, benim için işe yaramadı

İşte benim çözüm spec dosyasının

require 'rake' 

Yeri size özel tırmık işi yerine getirmek için ihtiyaç Bu satırları, örneğin üst

koyun var Dosyadan update_data tırmık 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 

My çevre: Biz birden tırmık görevleri kullanmak gerektiriyorsa

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) 
+1

Hii'yi arayarak gerekli olacaktır, bunun yerine _Rails.application.load_tasks_ kullanıyorum,' rake 'gerektiriyor. Bu iyi bir çözüm mü? – coderVishal

+0

'Rake :: Task.define_task (: çevre)' RuntimeError'dan kaçınmanın kazancı için: 'Ortam' görevinin nasıl yapıldığını bilmiyorum (bkz. - görevler) ' – s2t2

+3

Kullanıyorum:' Rake.application. "Rails.application" ile hepsini yüklemek yerine test edilen belirli görevi yüklemek için "görevler/görev adı" rake_require. load_tasks' (Rails 5, Rspec 3.5) – Steve

9

biz sadece diyoruz Sonra

require "rake" 
Rails.application.load_tasks 

ekleyebilir herhangi bir görev.

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

onun tüm görevleri yükler yavaş çünkü eğer ben teyit olamaz rağmen RSpec olmadan

aynı