简而言之,我想删除我在spec文件中使用的ActiveRecord :: Migration.create_table和drop_table函数的显示,我该怎么做?
(我自己回答,但我仍然认为发布它是一个好主意,因为在Rails中缺少关于该主题的文档)
Longuer版本:
我在Rails应用程序中使用Rspec中的迁移,我想删除迁移消息。
我这样做是因为我创建了继承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执行期间,它会在点的中间或测试的文档格式中显示经典的Migration输出:
-- create_table(:model_average_data)
-> 0.0059s
-- create_table(:model_average_acc_data)
-> 0.0044s
我想删除该输出。有可能吗?
答案 0 :(得分:0)
是的,这是可能的,我找到了答案:
只需将迁移代码放在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
然后它就消失了!
答案 1 :(得分:0)
您还可以在运行迁移之前执行ActiveRecord::Migration.verbose = false
。这样,您就无需使用该块。拥有选项真好。