Ruby 我如何可以故意运行两次rake测试?

Ruby 我如何可以故意运行两次rake测试?,ruby,rubygems,rake,Ruby,Rubygems,Rake,为了测试Ruby gem的缓存系统,我需要运行两次我的rake测试。在这两个测试运行之前,我需要用 require 'lib/gem_name' Gem.cache.clear 然后我只需要运行测试任务两次。我曾尝试将上述代码放在我的Rakefile顶部,并在我的rake任务中两次列出测试文件,但我收到无法要求此类文件错误,因为gemlib路径未正确加载 我需要一种有效的方法来运行两次测试,而不是在IRB中运行缓存清空代码,然后在命令行上运行两次rake测试 我的Rakefile如下所示: r

为了测试Ruby gem的缓存系统,我需要运行两次我的
rake
测试。在这两个测试运行之前,我需要用

require 'lib/gem_name'
Gem.cache.clear
然后我只需要运行
测试
任务两次。我曾尝试将上述代码放在我的
Rakefile
顶部,并在我的rake任务中两次列出测试文件,但我收到
无法要求此类文件
错误,因为gem
lib
路径未正确加载

我需要一种有效的方法来运行两次测试,而不是在IRB中运行缓存清空代码,然后在命令行上运行两次
rake测试

我的
Rakefile
如下所示:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.libs << 'test'
  t.test_files = FileList['tests/test_*.rb']
  t.loader = :testrb
end

desc 'Run gem tests'
task default: :test
task :test do |task|
    task.invoke 1
    task.reenable
    task.invoke 2
    task.reenable
    task.invoke 3
end
需要“rake/testtask”
Rake::TestTask.new do|t|

t、 libs您可以重新启动任务,如下所示:

task :test do |task|
    task.execute 1
    task.execute 2
    task.execute 3
end
这比可重入功能优越,因为可重入功能的外观如下:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.libs << 'test'
  t.test_files = FileList['tests/test_*.rb']
  t.loader = :testrb
end

desc 'Run gem tests'
task default: :test
task :test do |task|
    task.invoke 1
    task.reenable
    task.invoke 2
    task.reenable
    task.invoke 3
end

你可以在这里阅读更多关于执行vs调用的信息:

在@maxple的评论和@oneptune的回答的帮助下,我找到了一种实现我想要的东西的方法。在我下面修改的
Rakefile
中,我设置了一个新任务来清除缓存,然后设置了一个新的
test
任务来清空缓存并运行两次测试

require 'rake/testtask'

desc 'Clear gem cache'
task :clear_cache do
  lib = File.expand_path('../lib', __FILE__)
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
  require 'gem_name'
  Gem.cache.clear
end

desc 'Perform tests exactly once'
Rake::TestTask.new(:run_tests) do |t|
  t.libs << 'test'
  t.test_files = FileList['tests/test_*.rb']
  t.loader = :testrb
end

desc 'Performs test setup and runs tests twice'
task :test do
  Rake::Task['clear_cache'].execute
  Rake::Task['run_tests'].execute
  Rake::Task['run_tests'].execute
end

task default: :test
需要“rake/testtask”
描述“清除宝石缓存”
任务:清除缓存
lib=File.expand_path('../lib',u文件)
$LOAD_PATH.unshift(lib),除非$LOAD_PATH.include?(lib)
需要“gem_name”
Gem.cache.clear
终止
描述“仅执行一次测试”
Rake::TestTask.new(:运行测试)do | t|

t、 libs这个shell脚本是否足够<代码>ruby-e“需要'lib/gem_name';gem.cache.clear”;耙试验;耙试验
这是一个很好的建议,但由于我使用Travis CI在外部测试我的构建,我宁愿只运行一次
rake test
,而不必担心运行脚本。否则这正是我想要的功能,我只希望它是Ruby形式的。你能做另一个rake任务吗,比如
do\u test
,使用系统运行shell脚本的?