【问题标题】:Why does default rake task run specs in Rails app?为什么默认 rake 任务在 Rails 应用程序中运行规范?
【发布时间】:2015-05-07 06:02:00
【问题描述】:

我有一个应用程序仅使用 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

【问题讨论】:

标签: ruby-on-rails ruby rspec rake


【解决方案1】:

如果你的 Gemfile 中有rspec-rails,那么当 Rails 加载 gem 时会执行以下代码:

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 任务定义的工作方式,相同任务名称的每个声明添加到该任务。它没有重新定义它。因此,您会看到“无默认任务”并且运行规范。

【讨论】:

  • 好的,这是有道理的。但我在另一个 Rails 应用程序中有相同的宝石并得到rake aborted! Don't know how to build task 'default'。我想知道如何弄清楚为什么它没有 rake 任务。
  • @BSeven 我建议为此打开一个单独的问题,以及存在don't know how to build task 'default' 问题的 Rails 应用程序的 Gemfile 和 Rakefile。
  • 有没有办法从default 任务中删除spec 任务依赖?
猜你喜欢
  • 1970-01-01
  • 2019-04-13
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2017-10-01
  • 2016-06-21
相关资源
最近更新 更多