web-dev-qa-db-ja.com

RspecテストでのRakeタスクの実行

統合テストスイートを構築していますが、クリーンなデータベースを用意する必要があるロジックが1つあります。テストの1つの中でdb:test:purgeタスクを実行するにはどうすればよいですか?

私が使用しています:Ruby 1.9.2、Rails 3.0.9、rspec 2.6

49
xentek

次のようにRakeタスクを呼び出すことができます。

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

この場合、次のコードが生成されます。

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

自分のレーキタスクを実行する必要があるときに、承認された回答が機能しなかった

これが私の解決策です

スペックファイルの先頭に置く

require 'rake'

これらの行を、カスタムrakeタスクを実行する必要がある場所に配置します。 rake update_dataファイルから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

私の環境:

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

複数のレーキタスクを使用する必要がある場合は、追加できます

require "rake"
Rails.application.load_tasks

次に、任意のタスクを呼び出します。

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

それはすべてのタスクをロードするので、それが遅いかどうかは確認できませんが

10
coderVishal

タスクも必要です

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

この後、タスクを呼び出すだけです

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