我正在进行一个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 的更多开销