使用rake运行测试的问题



我正在进行一个Rails 3项目。详细版本信息:

rake, version 10.3.2
Rails 3.0.20
ruby 1.8.7 (2013-06-27 patchlevel 374)

我最近在我们的测试套件中遇到了一些测试问题。如果我只是在不指定任务的情况下运行rake,rake会运行整个测试套件,所有测试都通过。但是,一个特定的任务:rake test:workers会给出失败的测试。

在试图弄清失败测试的真相时,我试图弄清楚默认环境和命名任务的环境之间的区别。但是,我在任何地方都找不到指定的默认任务。我在整个项目目录中搜索"task:default",结果是空的。我也尝试过rake -W :default,但没有成功。

此外,我运行有不同的结果

ruby -I test <file path>

与相反

rake test:workers FILE=<file path>

前者运行时没有失败的测试,后者运行时失败。此外,当我中断后一个(rake)命令时,我得到以下内容:

Command failed with status (1): [ruby -I"lib:test" -I"/<home directory>/.rvm/gems/ruby-1.8.7-p374@global/gems/rake-10.3.2/lib" "/<home directory>/.rvm/gems/ruby-1.8.7-p374@global/gems/rake-10.3.2/lib/rake/rake_test_loader.rb" "<file path>" ]

因此,看起来rake test:workers FILE=<filename>真正做的只是在ruby -I上运行一个变体,再加载几个目录。所以我在命令行尝试了一下:

ruby -I"lib:test" -I"/<home directory>/.rvm/gems/ruby-1.8.7-p374@global/gems/rake-10.3.2/lib" "/<home directory>/.rvm/gems/ruby-1.8.7-p374@global/gems/rake-10.3.2/lib/rake/rake_test_loader.rb" "<file path>"

这让我没有失败的测试。

总之,我可以用ruby -I运行一个测试,不会得到失败的测试,但当rake运行看起来是相同的命令时,我会得到失败的检测。

问题:

1) 我应该在哪里查找我的:默认rake任务?

2) rake用ruby -I运行任务和我从命令行运行任务有什么区别?

不确定#1。你必须仔细阅读Rails代码。我可能会检查.rake文件。我最后只是说去死吧,然后重写了我们的默认任务:

Rake::Task[:default].clear
task :default => ['test:enqueue_javascripts', 'test:all']
# test.rake
namespace :test do
  task :javascripts => 'spec:javascript'
  # Run the javascript tests on process exit
  task :enqueue_javascripts do
    at_exit { Rake::Task['test:javascripts'].invoke }
  end
end

对于#2,-I命令将向加载路径添加一个目录。例如ruby -Itest path/to/test.rb。如果您的加载路径中已经包含了包含的目录,那么应该没有什么区别。除了运行rake 的更多开销

最新更新