2017-01-28 22 views
0

を指定:rakeタスクはRakefileで、私はこれ持って、レール4.2アプリで

task(:default).clear 
task :default => [:test, 'bundle:audit'] 

出力を、常にバンドルを持っている:監査が最初に実行されています。何故ですか?

私は、依存関係が発生したときにレーキがタスクを実行する場所をいくつか読みましたが、bundle:auditはテストに依存しません。ここで定義されています

https://github.com/rubysec/bundler-audit/blob/master/lib/bundler/audit/task.rb

答えて

0

レーキのGitHubのリポジトリに同じ問題を議論commentを引用すると:

それはあなたの問題はレールがそのテストタスクを作成する方法が原因であることが判明します:

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はすべてのテストファイルをロードするtest:allターゲットに対してRails :: TestTaskを使用します。

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

しかし、レーキとは異なり::すぐにテストを実行しTestTask、Railsの:: TestTaskはテストのみを実行するためにMinitestにat_exitハンドラに依存し、次にテストを実行するために必要なファイルが必要です。つまり、実行中のテストではレーキの依存関係は完全に無視されます。

Rails 4.1.8に関する議論のため、ソースコードへのリンクが更新されましたが、Rails 4.2.7.1のソースコードにはまだ問題があります。

この問題はGitHubのissue to the Rails teamとして報告されました。これはこのPRで修正されました。

しかし、この問題は、Rails 5.0.0以降に修正される予定です。

関連する問題