2013-08-31 11 views
7

Napisałem klejnot, który importuje dane do bazy danych, jeśli przekazujesz model ActiveRecord. Na przykład:Testowanie klejnotu korzystającego z modeli ActiveRecord

importer = Importer.new(Widget) 
importer.import(data_source) 

Czy istnieje dobry sposób na sprawdzenie tego klejnotu? W jakiś sposób musiałbym połączyć się z bazą danych testowych i utworzyć model testowy. Dzięki!

Odpowiedz

13

Głównie inspirowana z tego postu: http://blog.markstarkman.com/blog/2013/01/23/using-sqlite-to-test-active-record-models/

Po pierwsze, w swojej gemspec można dodać ActiveRecord i sqlite3 jako zależności tak:

spec.add_development_dependency "activerecord", "~> 4.0.0" 
spec.add_development_dependency "sqlite3" 

Następnie w specyfikacji/schema.rb, można zdefiniować schemat tak:

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

    create_table :users, :force => true do |t| 
    t.string :key 
    t.string :name 
    t.integer :age 
    t.datetime :dob 

    t.timestamps 
    end 

end 

Następnie można tworzyć modele w pliku models.rb:

class User < ActiveRecord::Base 
end 

W swojej spec_helper.rb, chcesz połączyć się z bazą danych sqlite w pamięci, należy załadować schematu i wymagają modele:

require 'active_record' 

ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" 

load File.dirname(__FILE__) + '/schema.rb' 
require File.dirname(__FILE__) + '/models.rb' 
+0

musiałem zmienić 'wymagają„activerecord'' do być 'require 'active_record'. Bardzo łatwo zepsuć. Dziękuję za odpowiedź. Wątpię, bym zauważył mój problem bez iti. – wuliwong

+0

Być może nie jest to dobry pomysł, ponieważ różne adaptery, na przykład sqlite3, mysql i postgresql, są w rzeczywistości różne. Aby uzyskać bardziej wszechstronny test, musisz przetestować wszystkie 3 adaptery. Jednak adaptery z wyjątkiem sqlite3 są nieco trudne do przetestowania w czasie instalacji. Dlatego wolę przetestować je tylko w czasie projektowania. – Robert

Powiązane problemy