Как отключить ActiveRecord :: Миграция многословия? - PullRequest
0 голосов
/ 27 апреля 2018

Короче говоря, я хочу убрать отображение функций ActiveRecord :: Migration.create_table и drop_table, которые я использую в файле спецификации, как я могу это сделать?

(Я сам ответил, но все же считаю хорошей идеей опубликовать его, потому что в Rails не хватает документации по этому вопросу)

Более длинная версия:

Я использую Миграции в своем Rspec на приложении Rails и хотел удалить сообщения Миграции.

Я делаю это, потому что я создаю временные классы, наследующие ApplicationRecord, и не уверен, что библиотечная часть моего приложения на Rails работает с такими элементами (в тестах, которые мне нужно проверить, это работает на Hash и ApplicationRecord).

Только для примера, моя библиотека вычисляет среднее значение по группам значений, хранящихся в записях.

В поддержку спецификации я добавляю файл model_average.rb, содержащий:

# frozen_string_literal: true

# migration for the model
def model_average_up
  ActiveRecord::Migration.create_table :model_average_data do |t|
    t.integer :v1
    t.float :v2
  end
  ActiveRecord::Migration.create_table :model_average_acc_data do |t|
    t.float :avg_v1
    t.integer :count_v1
    t.float :avg_v2
    t.integer :count_v2
  end
end

def model_average_down
   ActiveRecord::Migration.drop_table :model_average_data
   ActiveRecord::Migration.drop_table :model_average_acc_data
 end

# Test model to compute average on it
class ModelAverageDatum < ApplicationRecord; end

# Test model containing average
class ModelAverageAccData < ApplicationRecord
  def eq?(obj)
    avg_v1 == obj.avg_v1 && count_v1 == obj.count_v1 && avg_v2 == obj.avg_v2 && count_v2 == obj.count_v2
  end
 end

В файле спецификации библиотеки, в before(:context) я называю model_average_up, а в after(:context) я называю model_average_down.

Во время выполнения rspec он отображает классические выходные данные миграции в середине точек или в формате документации теста:

-- create_table(:model_average_data)
   -> 0.0059s
-- create_table(:model_average_acc_data)
   -> 0.0044s

Я хочу удалить этот вывод. Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы также можете сделать ActiveRecord::Migration.verbose = false перед запуском миграций. Таким образом, вы избежите необходимости в блоке. Приятно иметь варианты.

0 голосов
/ 27 апреля 2018

Да, это возможно, и я нашел свой ответ:

Просто поместите код миграции в блок, указанный в аргументе ActiveRecord :: Migration.suppress_messages.

В моем случае:

# migration for the model
def model_average_up
  ActiveRecord::Migration.suppress_messages do
    ActiveRecord::Migration.create_table :model_average_data do |t|
      t.integer :v1
      t.float :v2
    end
    ActiveRecord::Migration.create_table :model_average_acc_data do |t|
      t.float :avg_v1
      t.integer :count_v1
      t.float :avg_v2
      t.integer :count_v2
    end
  end
end

def model_average_down
  ActiveRecord::Migration.suppress_messages do
    ActiveRecord::Migration.drop_table :model_average_data
    ActiveRecord::Migration.drop_table :model_average_acc_data
  end
end

А потом уже нет!

...