2012-05-15 19 views
13

Tôi đang cố gắng trích xuất một tập hợp các mô hình từ ứng dụng Rails 3.2.3 thành đá quý để chúng có thể được sử dụng như một giao diện được chia sẻ giữa các ứng dụng.Thử nghiệm các mô hình ActiveRecord bên trong một viên ngọc?

Tôi di chuyển các mô hình thành một mô-đun và đặt nó trong thư mục lib/invite_interface/invite.rb

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

    def to_json; end; 
    def from_json; end; 
end 

tôi ngồi phịch rspec vào gemfile, đã nhận nó chạy thành công, tạo spec sau:

require 'spec_helper' 

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

end 

Thật không may, tôi không thể thực thi rspec trên mô hình, vì bản ghi hoạt động/rspec muốn kết nối đang hoạt động.

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' 

Làm cách nào để ngăn ActiveRecord tìm kiếm kết nối DB?

Trả lời

13

Bạn cần kiểm tra thư viện của mình với cơ sở dữ liệu, vì vậy bạn cũng có thể sử dụng cơ sở dữ liệu SQLite trong bộ nhớ để kiểm tra. Chỉ cần thêm video này vào spec_helper.rb:

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

và tạo giản đồ của bạn như sau:

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

    create_table :invites, :force => true do |t| 
    t.string :text 
    end 
    ... 
end 
+0

Cảm ơn Yuri, điều này cuối cùng đã làm việc cho tôi (mặc dù tôi đã phải di chuyển đến minitest từ rspec do các vấn đề sqlite3 đau đớn) –

+1

Điều này là tuyệt vời, đặc biệt. với tùy chọn từ bên dưới: database => ': memory:' – ghayes

+0

@juwiley bạn có thể tư vấn cho tôi nên sử dụng minitest hay rspec dựa trên kinh nghiệm của bạn không. –

10

Tôi đã tìm thấy rằng nếu bạn đang thử nghiệm mô hình của bạn bị cô lập, bạn có thể cũng cố gắng tận dụng trong SQLite3 của khả năng -memory khi xác định kết nối ActiveRecord để có được thông số kỹ thuật rất nhanh:

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

Hãy thử nó ra, nó làm việc như một nét duyên dáng cho tôi và đã thử nghiệm mô hình của tôi nhanh hơn nhiều.

+2

Điều này thực sự hữu ích khi tạo một cơ sở dữ liệu môi trường thử nghiệm đơn giản trong bộ nhớ. Mẹo hay. – ghayes

Các vấn đề liên quan