标签: rake-task

在Rakefile中动态生成Rake测试任务(基于现有测试文件)

我正在基于Rakefile中的现有测试文件动态生成测试任务.考虑您有以模式命名的各种单元测试文件test_<name>.rb.所以我正在做的是创建一个以'test'命名空间内的文件名命名的任务.使用下面的代码,我可以调用所有测试rake test:<name>

require 'rake/testtask'

task :default => 'test:all'

namespace :test do

  desc "Run all tests"
  Rake::TestTask.new(:all) do |t|
    t.test_files = FileList['test_*.rb']
  end

  FileList['test_*.rb'].each do |task|
    name = task.gsub(/test_|\.rb\z/, '')
    desc "Run #{name} tests"
    Rake::TestTask.new(:"#{name}") do |t|
      t.pattern = task
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,它似乎太多代码用于简单的任务生成.我仍然没有找到一种方法将一些描述文本打印到控制台puts "Running #{name} tests:"

有比上述方法更优雅的方式吗?

编辑:我真正期望得到的是动态定义任务的循环的替代方案,但我想rake lib没有提供任何帮助,所以我坚持循环.

ruby rakefile rake-task

5
推荐指数
1
解决办法
4117
查看次数

使用Rspec测试rake任务不接受参数

根据Stephen Hagemann的这篇文章,我正试图为我的一个rake任务写一个Rspec测试.

lib/tasks/retry.rake:

namespace :retry do

  task :message, [:message_id] => [:environment] do |t, args|
    TextMessage.new.resend!(args[:message_id])
  end
end
Run Code Online (Sandbox Code Playgroud)

spec/tasks/retry_spec.rb:

require 'rails_helper'
require 'rake'

describe 'retry namespace rake task' do
  describe 'retry:message' do
    before do
      load File.expand_path("../../../lib/tasks/retry.rake", __FILE__)
      Rake::Task.define_task(:environment)
    end

    it 'should call the resend action on the message with the specified message_id' do
      message_id = "5"
      expect_any_instance_of(TextMessage).to receive(:resend!).with message_id
      Rake::Task["retry:message[#{message_id}]"].invoke
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此测试时,我收到以下错误:

Don't know how to build task 'retry:message[5]'
Run Code Online (Sandbox Code Playgroud)

另一方面,当我运行没有参数的任务时:

Rake::Task["retry:message"].invoke
Run Code Online (Sandbox Code Playgroud)

我能够调用rake任务,但测试失败,因为没有message_id.

我将参数传递给rake任务的方式有什么问题? …

ruby rake rspec ruby-on-rails rake-task

5
推荐指数
2
解决办法
2128
查看次数

如何从耙任务中返回一些值

我如何从RakeRuby任务中返回一些价值。

样例代码:

namespace tasks
    task task1: :environment do |task|
      log = "Running task"
      puts log
      log << "Done"
      return log # suggest how to do this
    end
end
Run Code Online (Sandbox Code Playgroud)

我运行rake任务为:Rake::Task['tasks:task1'].invoke。如何获取变量中的返回值,如下所示:

result = Rake::Task['tasks:task1'].invoke
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rake-task

5
推荐指数
1
解决办法
1266
查看次数

如何确保rake任务一次只运行一个进程

我使用crontab在某个时间调用rake任务,例如:每3小时一次

我想确保当crontab准备好执行rake任务时,它可以检查rake任务是否正在运行.如果它是这样不执行.

这该怎么做.谢谢.

ruby linux rake rake-task

4
推荐指数
2
解决办法
2861
查看次数

如何设置播种的Rake任务

(这实际上是一个关于Rake&Rails和依赖关系的新手问题.试着把我们的所有这些放在一起)

基本上,我想要一个像seed.rb一样的Rake任务,但是需要单独调用.它为开发环境添加了测试数据,而我的seed.rb为所有环境提供了基本数据.

脚本family_seed.rb使用FactoryGirl生成一些记录.它看起来像这样:

require File.expand_path('../../config/environment', __FILE__)
require './spec/factories'

Family.delete_all
Member.delete_all
zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')
Run Code Online (Sandbox Code Playgroud)

它运行良好bundle exec "ruby db/family_seeds.rb",但我的问题是如何使用Rake进行设置.整个事情应该放在Rake任务中吗?相反,我怎样才能设置一个可以调用脚本的任务,同时确保Rails开发环境在运行时可用?我不只是想完成工作,而是以"正确"的方式完成工作.

rake ruby-on-rails seed rake-task

4
推荐指数
1
解决办法
3635
查看次数

在Ruby中使用asserts的最佳实践是什么,但不是单元测试的一部分?

我想使用断言在rake任务中引发错误.

the_index = items.index(some_item)
assert_not_nil the_index, "Lookup failed for the following item: " + some_item
Run Code Online (Sandbox Code Playgroud)

我得到undefined method assert_not_nil.我可以在我的rake任务中包含断言文件吗?怎么样?

这是最佳做法,还是有更好的方法来做到这一点?

在Ruby 1.9.2中工作.

ruby assertions rake-task ruby-on-rails-3

4
推荐指数
1
解决办法
1021
查看次数

Rake - 添加到默认任务

我正在使用第三方gem,这使我能够使用rake命令执行一些测试:

rake jasminerice:run
Run Code Online (Sandbox Code Playgroud)

是否可以将任务包含在默认rake任务中?(即当我跑步时,rakerake jasminerice:run被添加到我的其余测试中).这是CI集成所必需的.

任何帮助将不胜感激!

ruby rake ruby-on-rails rake-task

4
推荐指数
1
解决办法
599
查看次数

如何从rake文件中运行ruby类?

我想从sample.rake文件运行ruby类.

考虑myruby.rb是一个ruby文件.

我想从运行此sample.rakeruby myruby.rb

ruby rake ruby-on-rails rakefile rake-task

4
推荐指数
1
解决办法
7201
查看次数

Ruby rake loaderror - 捆绑exec rake无法正常工作

我正在尝试运行该命令,rake db:migrate但我一直收到此错误:

/Users/[name]/.rvm/gems/ruby-2.2.1/bin/rake:23:in `load': cannot load such file -- /Users/[name]/.rvm/rubies/ruby-2.2.1/lib/ruby/gems/2.2.0/specifications/default/bin/rake (LoadError)
from /Users/[name]/.rvm/gems/ruby-2.2.1/bin/rake:23:in `<main>'
from /Users/[name]/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `eval'
from /Users/[name]/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `<main>'
Run Code Online (Sandbox Code Playgroud)

尝试bundle exec rake db:migrate也给了我同样的错误.

有没有办法可以解决这个问题?(我在Mac OS X 10.10.5上)

编辑:错误中我[名称]的第一个字母是大写,即使在我的系统中,它是小写的.

编辑[部分解决]:所以我使用Ruby版本2.2.1,我应该使用2.1.2.虽然这没有解决rake命令错误,但我试图rails server在更改我的Ruby版本后成功运行.

ruby rake ruby-on-rails rake-task

4
推荐指数
1
解决办法
2873
查看次数

NameError: 未初始化的常量 Rails::TestTask

我将此代码放在我的 Rakefile 中,以便能够从附加文件夹“test/classes”(不仅仅是来自 test/models、test/controllers 等)运行测试:

# Adding test/classes directory to rake test.
namespace :test do # line 9
  desc "Test tests/classes/* code"
  Rails::TestTask.new(parsers: 'test:prepare') do |t| # line 11
    t.pattern = 'test/classes/**/*_test.rb'
  end
end

Rake::Task['test:run'].enhance ["test:classes"]
Run Code Online (Sandbox Code Playgroud)

当我运行rails test.

但是当我运行时rails db:migrate,我收到此错误:

NameError: uninitialized constant Rails::TestTask
/Users/Developer/project/Rakefile:11:in `block in <top (required)>'
/Users/Developer/project/Rakefile:9:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能摆脱错误,但仍然能够从

ruby rake ruby-on-rails rakefile rake-task

4
推荐指数
1
解决办法
2041
查看次数