问题描述
|
我想测试一个模型混合,所以我想创建一个假的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
你应该给自己做一个插件测试