Ruby 如何在RSpec mock_模型中正确地包含和测试ActiveSupport::Concern?
我试图通过将模块包含在基本的mock_模型对象中来规范模块。但是,当我调用模块中定义的实例方法时,ActiveRecord会尝试与数据库建立连接 模块:Ruby 如何在RSpec mock_模型中正确地包含和测试ActiveSupport::Concern?,ruby,activerecord,rspec,mocking,Ruby,Activerecord,Rspec,Mocking,我试图通过将模块包含在基本的mock_模型对象中来规范模块。但是,当我调用模块中定义的实例方法时,ActiveRecord会尝试与数据库建立连接 模块: module Stuff module SoftDelete extend ActiveSupport::Concern def soft_delete puts "Called here" end end end 规范: describe Stuff:
module Stuff
module SoftDelete
extend ActiveSupport::Concern
def soft_delete
puts "Called here"
end
end
end
规范:
describe Stuff::SoftDelete do
class Network < ActiveRecord::Base
include Stuff::SoftDelete
attr_accessor :deleted_at
end
before (:each) do
@network = mock_model(Network)
end
context "When a record is deleted" do
it "is marked as deleted" do
@network.soft_delete
end
end
end
description Stuff::SoftDelete do
类网络
运行此规范时,出现以下错误:
1) Stuff::SoftDelete When a record is deleted is marked as deleted
Failure/Error: @network.soft_delete
ActiveRecord::ConnectionNotEstablished:
ActiveRecord::ConnectionNotEstablished
# ./spec/apoc/soft_delete_spec.rb:18:in `block (3 levels) in <top (required)>'
1)Stuff::SoftDelete删除记录时会标记为已删除
失败/错误:@network.soft\u删除
ActiveRecord::ConnectionNote已建立:
ActiveRecord::ConnectionNotEstablished
#./spec/apoc/soft_delete_spec.rb:18:in'block(3层)in'
注意:如果我在真正的ActiveRecord类中包含SoftDelete模块,它将正常工作。mock_模型似乎无法处理该模块
我想在这件事上帮点忙。
谢谢 你信任ActiveRecord吗?如果是这样,不要从中继承;单独测试您的模块。如果您的模块包含调用ActiveRecord方法,则将它们存根并仅测试代码