如何在 Rails 5 中 运行 默认 rake 任务?

How to run default rake tasks in Rails 5?

这是某人的上篮...

回到 Rails <= 4 天,我们 运行 我们的测试套件只需在命令行键入 $ rake,这要归功于 Rakefile 中的默认设置:

task default: [:rubocop, :spec, :teaspoon]

但在 Rails 5 中,现在 rake 已被 rails 取代,如何 运行 默认 rake 任务并不那么明显。 rails 单独给出了可能的命令列表 rails 响应但不 运行 规范。 rails test 似乎合乎逻辑,但它试图 运行 我们不使用的最小测试。 rails spec 会 运行 Rspec 但不会 teaspoonrubocop

这是去哪儿了?为什么看起来如此简单的事情对我自己来说却如此困难?

rails default 在 Rails 5.2.1 上为我执行这些任务,尽管我在任何地方都找不到它的记录。

只需创建一个新的 rake 任务来运行其他任务:

lib/tasks/my_extensions.耙
task :my_test do
  Rake::Task[:foo].invoke
  Rake::Task[:bar].invoke
end
# or the short version:
# task my_test: [:foo, :bar]

task :foo do
  puts "FOO"
end

task :bar do
  puts "BAR"
end

运行 rails my_test 并且您将在控制台中看到 FOOBAR

如果您不知道在哪里放置文件来编写上面的代码,请检查您的/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_relative 'config/application'

Rails.application.load_tasks

上面写着写在lib/tasks里面,以.rake结尾,不需要require。在您的特定问题中,将我的代码从 :foo:bar 更改为您的特定任务 :rubocop :spec :teaspoon.

但是,您似乎正在进行一些 BDD 或 TDD 循环。查看 rails Guard,它可能对您有更好的帮助。我在我的项目中使用它并且它运行良好。