7
如果您传递ActiveRecord模型,我写了一个将数据导入数据库的gem。例如:测试使用ActiveRecord模型的gem
importer = Importer.new(Widget)
importer.import(data_source)
有没有很好的方法来测试这个宝石?我会以某种方式连接到一个测试数据库并创建一个测试模型。谢谢!
如果您传递ActiveRecord模型,我写了一个将数据导入数据库的gem。例如:测试使用ActiveRecord模型的gem
importer = Importer.new(Widget)
importer.import(data_source)
有没有很好的方法来测试这个宝石?我会以某种方式连接到一个测试数据库并创建一个测试模型。谢谢!
从这个帖子晴启发: http://blog.markstarkman.com/blog/2013/01/23/using-sqlite-to-test-active-record-models/
首先,在你gemspec,你可以像这样添加的ActiveRecord和sqlite3的作为依赖:
spec.add_development_dependency "activerecord", "~> 4.0.0"
spec.add_development_dependency "sqlite3"
然后在投机/ schema.rb,你可以定义你的模式,像这样:
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
然后你就可以在models.rb文件中创建您的模型:
class User < ActiveRecord::Base
end
在你spec_helper.rb,要连接到内存中的SQLite数据库,加载架构,并要求型号:
require 'active_record'
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
load File.dirname(__FILE__) + '/schema.rb'
require File.dirname(__FILE__) + '/models.rb'
我不得不改变'需要“activerecord''到是'require'active_record''。很容易搞砸了。感谢你的回答。我怀疑如果没有iti,我会注意到我的问题。 – wuliwong
也许这不是一个好主意,因为不同的适配器,比如sqlite3,mysql和postgresql实际上是不同的。要进行更全面的测试,您需要测试所有3个适配器。但是,除了sqlite3以外的适配器在安装时有点难以测试。所以我宁愿只在开发时测试它们。 – Robert