为什么 Rails 应用中的默认 rake 任务 运行 规范?
Why does default rake task run specs in Rails app?
我有一个应用仅使用 rake
即可运行规范,但不知道该任务的定义位置或方式。 lib/tasks.
中没有任务
Gemfile 的一部分:
group :test do
gem 'capybara'
gem 'guard-rspec'
gem 'rspec-rails'
gem 'database_cleaner'
gem 'launchy'
gem 'oauth2'
gem 'rack_session_access'
gem 'factory_girl'
gem 'webmock'
gem 'selenium-webdriver'
end
RSpec 宝石:
guard-rspec (4.5.0)
rspec (3.1.0)
rspec-core (3.1.7)
rspec-expectations (3.1.2)
rspec-mocks (3.1.3)
rspec-rails (3.1.0)
rspec-support (3.1.2)
我正在使用 Rake 10.4.2 和 Rails 4.1.6.
此外,当我添加:
task :default do
puts 'No default task.'
end
到 Rakefile,首先它运行规范,然后打印 "No default task."
编辑:添加 Rakefile
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
Rails.application.load_tasks
如果你的 Gemfile 中有 rspec-rails
,那么当 gem 被 Rails 加载时,将执行此行:
https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec-rails.rb#L19
load "rspec/rails/tasks/rspec.rake"
这又定义了默认的 rake 任务:
https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec/rails/tasks/rspec.rake#L6
task :default => :spec
这就是为什么默认的 rake 任务 运行 是您 Rails 应用程序中的规范。
此外,当您添加此代码时:
task :default do
puts 'No default task.'
end
这实际上并没有重新定义默认任务:它增加了默认任务。 Rake 任务定义的工作方式,相同任务名称的每个声明 添加到该任务 。它不会重新定义它。因此,您看到的结果是 "No default task" 和 规格是 运行.
我有一个应用仅使用 rake
即可运行规范,但不知道该任务的定义位置或方式。 lib/tasks.
Gemfile 的一部分:
group :test do
gem 'capybara'
gem 'guard-rspec'
gem 'rspec-rails'
gem 'database_cleaner'
gem 'launchy'
gem 'oauth2'
gem 'rack_session_access'
gem 'factory_girl'
gem 'webmock'
gem 'selenium-webdriver'
end
RSpec 宝石:
guard-rspec (4.5.0)
rspec (3.1.0)
rspec-core (3.1.7)
rspec-expectations (3.1.2)
rspec-mocks (3.1.3)
rspec-rails (3.1.0)
rspec-support (3.1.2)
我正在使用 Rake 10.4.2 和 Rails 4.1.6.
此外,当我添加:
task :default do
puts 'No default task.'
end
到 Rakefile,首先它运行规范,然后打印 "No default task."
编辑:添加 Rakefile
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
Rails.application.load_tasks
如果你的 Gemfile 中有 rspec-rails
,那么当 gem 被 Rails 加载时,将执行此行:
https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec-rails.rb#L19
load "rspec/rails/tasks/rspec.rake"
这又定义了默认的 rake 任务:
https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec/rails/tasks/rspec.rake#L6
task :default => :spec
这就是为什么默认的 rake 任务 运行 是您 Rails 应用程序中的规范。
此外,当您添加此代码时:
task :default do
puts 'No default task.'
end
这实际上并没有重新定义默认任务:它增加了默认任务。 Rake 任务定义的工作方式,相同任务名称的每个声明 添加到该任务 。它不会重新定义它。因此,您看到的结果是 "No default task" 和 规格是 运行.