我想测试一个模型mixin,所以我想创建一个假的activerecord模型来包含它,然后测试该模型的行为。
我从另一个上下文获得的规范要求假模型的db表存在(我知道,我不应该依赖于此,但这就是它们现在的用法)。所以我需要在规范运行时为假模型(TestModel
)创建一个表。
我该怎么做?
答案 0 :(得分:0)
在这种情况下,像处理外部服务一样处理伪造的模型并模拟其他模型的容器。像
这样的东西faked_model = mock "FakeModelThatShouldntExist"
faked_model.stub!(:name).and_return("jwo")
FakeModelThatShouldntExist.should_receive(:find_by_customer_id).and_returns(faked_model)
正常运行测试
答案 1 :(得分:0)
这看起来有点矫枉过正, 但在我看来,如果一个库需要在抽象中进行测试 可能值得把它拉成宝石或插件。
通常在我的应用程序中,我测试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
你应该有自己的插件测试