Как запустить rake-задачи по умолчанию в Rails 5?

Вот для кого-то простоя...

Вернувшись в Rails ‹= 4 дня, мы запускали наш набор тестов, просто набрав $ rake в командной строке, благодаря значениям по умолчанию в Rakefile:

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

но в Rails 5 не так очевидно, как запускать rake-задачи по умолчанию теперь, когда rake заменено на rails. Только rails дает список возможных команд, на которые реагирует рельс, но не запускает спецификации. rails test кажется логичным, но он пытается запустить минитест, который мы не используем. rails spec запустит Rspec, но не teaspoon или rubocop.

Куда это делось? И почему мне так трудно найти что-то такое, казалось бы, простое?


person Meltemi    schedule 09.11.2018    source источник


Ответы (2)


rails default выполняет эти задачи для меня на Rails 5.2.1, хотя я нигде не смог найти это задокументировано.

person DylanReile    schedule 09.11.2018

Просто создайте новую задачу rake, которая запускает другие задачи:

lib/tasks/my_extensions.rake
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, и вы увидите FOO и BAR, напечатанные в вашей консоли.

Если вы не знаете, куда поместить файл для написания приведенного выше кода, проверьте /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, они вам не нужны. В вашем конкретном вопросе измените мой код с :foo и :bar на ваши конкретные задачи :rubocop :spec :teaspoon.

Однако похоже, что вы выполняете какой-то цикл BDD или TDD. Проверьте rails Guard, это может помочь вам лучше. Я использую его в своем проекте, и он отлично работает.

person EmmanuelB    schedule 09.11.2018