2011-08-01 71 views
47

我构建了一个集成测试套件,并且有一点逻辑需要我有一个干净的数据库。我如何在我的一个测试中运行db:test:purge任务?在Rspec测试中运行Rake任务

我使用:红宝石1.9.2,3.0.9导轨,RSpec的2.6

+0

不相同RSpec的:http://stackoverflow.com/questions/3530/how-do-i-rake-tasks-within -a-ruby-script –

回答

51

您可以调用Rake任务如下:

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

在这种情况下,这将导致在下面的代码:

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

这样做了。谢谢。我也有错误的任务名称,一开始就把我抛弃了。在Rails 3中,rake测试:准备好似乎在做诀窍 – xentek

+1

@jim好点。您可以在这些实例中使用Rake::Task[name].execute,但您需要确保满足其中的任何依赖项(例如':environment'),因为在使用此方法调用任务时不会运行这些依赖项。 – xentek

+0

这很有帮助。如何将参数传递给任务给出上面的例子? – n8gard

32

批准的回答并没有为我工作,当我需要执行我自己的耙子任务

这是我的解决方案

放在规范文件

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

嗨,而不是我已经使用_Rails.application.load_tasks_,下面需要'耙'加载任务。这是一个好的解决方案吗? – coderVishal

+0

'Rake :: Task.define_task(:environment)'避免了'RuntimeError:不知道如何构建任务'环境'(请参阅 - 任务)' – s2t2

+3

我正在使用:'Rake.application。 rake_require“tasks/task-name”加载正在测试的特定任务,而不是使用Rails.application加载所有任务。 load_tasks'(Rails 5,Rspec 3.5) – Steve

9

如果我们需要使用多个耙任务,我们可以添加

require "rake" 
Rails.application.load_tasks 

然后只需调用任何任务。

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

虽然如果慢,因为它加载的所有任务,我不能确认