我想測試一個模型mixin,所以我想創建一個假的activerecord模型來包含它,然後測試該模型的行爲。如何在運行規範時更改數據庫模式?
我從另一個上下文中獲得的規格要求假模型的db表存在(我知道,我不應該依賴這個,但現在他們是這樣)。所以我需要在規範運行時爲假模型創建一張表(TestModel
)。
我該怎麼做?
我想測試一個模型mixin,所以我想創建一個假的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)
運行測試正常
某事,這似乎有點小題大做, 但在我看來,如果一個圖書館需要抽象 測試它可能是值得拉出成寶石或插入。
通常在我的應用程序中,我測試mixin的結果,而不是mixin本身。 並將mixin測試保存在相關插件或寶石中。
如果包含重要的商業邏輯(或者你的公司不會讓你開源),把它作爲一個插件。
如果它一般可用,那就把它分解爲一個寶石。
這裏是一塊寶石,我抽象 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
,你應該有自己的插件測試的一個例子