在rails 4.2应用程序中,在Rakefile中,我有:
task(:default).clear
task :default => [:test, 'bundle:audit']
输出,总是有bundle:audit first first。那是为什么?
我在某些地方读过rake执行任务时出现依赖关系,但是bundle:审计,据我所知,不依赖于测试。它在这里定义:
https://github.com/rubysec/bundler-audit/blob/master/lib/bundler/audit/task.rb
答案 0 :(得分:0)
引用comment在Rake的GitHub存储库中讨论相同的问题:
事实证明,您的问题是由于rails创建测试任务的方式:
desc "Run tests quickly by merging all types and not resetting db" Rails::TestTask.new(:all) do |t| t.pattern = "test/**/*_test.rb" end
https://github.com/rails/rails/blob/v4.2.7.1/railties/lib/rails/test_unit/testing.rake#L24-L27
这里Rails使用Rails :: TestTask来加载
test:all
目标,它将加载所有测试文件。def define task @name do if ENV['TESTOPTS'] ARGV.replace Shellwords.split ENV['TESTOPTS'] end libs = @libs - $LOAD_PATH $LOAD_PATH.unshift(*libs) file_list.each { |fl| FileList[fl].to_a.each { |f| require File.expand_path f } } end end
https://github.com/rails/rails/blob/v4.2.7.1/railties/lib/rails/test_unit/sub_test_task.rb#L106-L118
但与立即运行测试的Rake :: TestTask不同,Rails :: TestTask只需要运行测试所需的文件,然后依赖于Minitest中的
at_exit
处理程序来运行测试。这意味着运行测试时完全忽略了rake依赖项。
我更新了源代码的链接,因为讨论是关于Rails 4.1.8的,但问题仍然存在于Rails 4.2.7.1的源代码中。
此问题在GitHub上报告为issue to the Rails team,并已在此PR中修复。
说:自Rails 5.0.0以来,这个问题应该修复。