我正在开发一个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)使用ruby -I
运行任务的rake和我从命令行运行任务有什么区别?
答案 0 :(得分:0)
对#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运行的更多开销