运行规范时如何更改数据库模式?

问题描述

| 我想测试一个模型混合,所以我想创建一个假的activerecord模型以将其包括在内,然后测试该模型的行为。 我从另一个上下文获得的规范要求存在伪造模型的db表(我知道,我不应该依赖于此,但这就是现在的样子)。所以我需要在规范运行时为假模型(
TestModel
)创建一个表。 我怎样才能做到这一点?     

解决方法

        在这种情况下,请像对待外部服务一样对待伪造的模型,并模拟出另一个模型的容器。就像是
faked_model = mock \"FakeModelThatShouldntExist\"
faked_model.stub!(:name).and_return(\"jwo\")
FakeModelThatShouldntExist.should_receive(:find_by_customer_id).and_returns(faked_model)
正常运行测试     ,        这似乎有点过分, 但我认为,是否需要对库进行抽象测试 可能值得将其拉出到gem或plugin中。 通常,在我的应用程序中,我测试mixins的结果,而不是mixins本身。 并将mixin测试保存在相关的插件或gem中。 如果包含重要的业务逻辑(或者您的公司不允许您将其开源),请将其保留为插件。 如果它通常可用,则将其作为宝石分解出来。 这是我提取的宝石的示例 http://bit.ly/hJ4QC2 几乎只使用
rails g plugin
模板并添加如下内容
require \'active_record\'

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

ActiveRecord::Schema.define(:version => 0) do
  create_table :somethings,:force => true do |t|
    t.string :size
  end
end
你应该给自己做一个插件测试