Ruby 如何在RSpec mock_模型中正确地包含和测试ActiveSupport::Concern?

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:

我试图通过将模块包含在基本的mock_模型对象中来规范模块。但是,当我调用模块中定义的实例方法时,ActiveRecord会尝试与数据库建立连接

模块:

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方法,则将它们存根并仅测试代码