Ruby on rails 如何在运行规范时更改数据库模式?
我想测试一个模型mixin,所以我想创建一个假的activerecord模型来包含它,然后测试该模型的行为 我从另一个上下文中获得的规范要求伪模型的db表存在(我知道,我不应该依赖于此,但现在就是这样)。因此,我需要在规范运行时为伪模型(Ruby on rails 如何在运行规范时更改数据库模式?,ruby-on-rails,activerecord,rspec,migration,mixins,Ruby On Rails,Activerecord,Rspec,Migration,Mixins,我想测试一个模型mixin,所以我想创建一个假的activerecord模型来包含它,然后测试该模型的行为 我从另一个上下文中获得的规范要求伪模型的db表存在(我知道,我不应该依赖于此,但现在就是这样)。因此,我需要在规范运行时为伪模型(TestModel)创建一个表 我该怎么做?在这种情况下,将伪造的模型视为外部服务,并模拟其他模型的容器。差不多 faked_model = mock "FakeModelThatShouldntExist" faked_model.stub!(:name).a
TestModel
)创建一个表
我该怎么做?在这种情况下,将伪造的模型视为外部服务,并模拟其他模型的容器。差不多
faked_model = mock "FakeModelThatShouldntExist"
faked_model.stub!(:name).and_return("jwo")
FakeModelThatShouldntExist.should_receive(:find_by_customer_id).and_returns(faked_model)
正常运行测试这似乎有些过分, 但在我看来,如果一个库需要进行抽象测试 把它放到一个gem或插件中可能是值得的 一般来说,在我的应用程序中,我测试混合的结果,而不是混合本身。 并将mixin测试保存在相关插件或gem中 如果包含重要的业务逻辑(或者您的公司不允许您将其开源),请将其作为插件保存 如果它普遍可用,那么就把它作为宝石发行 这是我提取的一个宝石的例子 几乎只需使用
railsgplugin
模板并添加如下内容
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
你应该自己做一个插件测试