2

基本的なmock_modelオブジェクトにモジュールを含めて、モジュールを指定しようとしています。ただし、モジュールで定義されたインスタンスメソッドを呼び出すと、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

この仕様を実行すると、次のエラーが発生します。

  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)>'

:SoftDeleteモジュールを実際のActiveRecordクラスに含めると、機能します。mock_modelがモジュールを処理できないようです。

これについての助けが欲しいです。ありがとう!

4

1 に答える 1

1

ActiveRecordを信頼しますか?もしそうなら、それを継承しないでください。モジュールを個別にテストします。モジュールにActiveRecordメソッドの呼び出しが含まれている場合は、それらをスタブしてコードのみをテストします。

于 2012-05-01T03:53:03.973 に答える