在Rspec测试中运行Rake任务

时间:2011-08-01 07:09:19

标签: ruby ruby-on-rails-3 rspec tdd rake

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

我正在使用:ruby 1.9.2,rails 3.0.9,rspec 2.6

5 个答案:

答案 0 :(得分:55)

您可以按如下方式调用Rake任务:

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

在这种情况下,这将产生以下代码:

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

答案 1 :(得分:34)

当我需要执行自己的佣金任务时,批准的答案对我不起作用

这是我的解决方案

放入spec文件的顶部

require 'rake'

将这些行放在您需要执行自定义佣金任务的位置,例如 example.rake

rake update_data
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) 

答案 2 :(得分:10)

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

require "rake"
Rails.application.load_tasks

然后简单地调用任何任务。

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

虽然我无法确认它是否因为加载了所有任务而变慢了

答案 3 :(得分:1)

对我来说(rails-6)

Rails.application.load_tasks
Rake::Task['app:sync'].invoke

=> 在我的情况下不需要

答案 4 :(得分:0)

我们还需要任务

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

此后,只需调用任务

Rake::Task['new:adapter'].invoke