简体   繁体   中英

Why does default rake task run specs in Rails app?

I have one app that runs the specs with just rake , but don't know where or how this task is defined. There are no tasks in lib/tasks.

Part of 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 gems:

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)

I'm using Rake 10.4.2 and Rails 4.1.6.

Also, when I add:

task :default do
  puts 'No default task.'
end

to the Rakefile, first it runs the specs, and then prints "No default task."

EDIT: Add 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

If you have rspec-rails in your Gemfile, then when the gem is loaded by Rails is will execute this line:

https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec-rails.rb#L19

load "rspec/rails/tasks/rspec.rake"

which in turn defines the default rake task:

https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec/rails/tasks/rspec.rake#L6

task :default => :spec

That's why the default rake task runs the specs in your Rails app.

Furthermore, when you added this code:

task :default do
  puts 'No default task.'
end

That does not in fact redefine the default task: it augments it. The way that Rake task definition works, each declaration of the same task name adds to that task . It does not redefine it. Hence the result that you see "No default task" and the specs are run.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM