15

Rails 3.2.3アプリからgemにモデルのセットを抽出して、アプリケーション間の共有インターフェイスとして使用できるようにしようとしています。

モデルをモジュールに移動し、lib / invoke_interface/invite.rbに配置しました

module InviteInterface
  class Invite < ActiveRecord::Base
    belongs_to :user
  end

  def to_json; end;
  def from_json; end;
end

rspecをgemfileに追加し、正常に実行して、次の仕様を作成しました。

require 'spec_helper'

describe InviteInterface::EncounterSurvey do
  it 'should belong to user' do
    subject.should respond_to(:user)
  end

end

残念ながら、アクティブなrecord / rspecがアクティブな接続を必要としているため、モデルでrspecを実行できません。

1) InviteInterface::Invite should belong to encounter survey set
   Failure/Error: subject.should respond_to(:user)
   ActiveRecord::ConnectionNotEstablished:
     ActiveRecord::ConnectionNotEstablished
   # /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
   # /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
   # /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
   # /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:228:in `columns'
   # /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:243:in `column_defaults'

ActiveRecordがDB接続を検索しないようにするにはどうすればよいですか?

4

2 に答える 2

13

とにかくデータベースを使用してライブラリをテストする必要があるため、テストにはインメモリSQLiteデータベースを使用することをお勧めします。これをに追加するだけspec_helper.rbです:

ActiveRecord::Base.establish_connection(:adapter => "sqlite3", 
                                       :database => ":memory:")

次のようにスキーマを作成します。

ActiveRecord::Schema.define do
  self.verbose = false

  create_table :invites, :force => true do |t|
    t.string :text
  end
  ...
end
于 2012-05-15T16:46:40.220 に答える
10

モデルを分離してテストしている場合は、ActiveRecord接続を定義するときにSQLite3のメモリ内機能を利用して、非常に高速な仕様を取得することもできます。

ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => ':memory:'
)

それを試してみてください、それは私にとって魅力のように機能し、私のモデルをはるかに迅速にテストしました。

于 2012-05-20T22:27:58.393 に答える