2011-06-13 100 views
1

我想測試一個模型mixin,所以我想創建一個假的activerecord模型來包含它,然後測試該模型的行爲。如何在運行規範時更改數據庫模式?

我從另一個上下文中獲得的規格要求假模型的db表存在(我知道,我不應該依賴這個,但現在他們是這樣)。所以我需要在規範運行時爲假模型創建一張表(TestModel)。

我該怎麼做?

回答

0

在這種情況下,您可以像處理外部服務一樣處理僞造的模型,並嘲笑其他模型的容器。像

faked_model = mock "FakeModelThatShouldntExist" 
faked_model.stub!(:name).and_return("jwo") 
FakeModelThatShouldntExist.should_receive(:find_by_customer_id).and_returns(faked_model) 

運行測試正常

0

某事,這似乎有點小題大做, 但在我看來,如果一個圖書館需要抽象 測試它可能是值得拉出成寶石或插入。

通常在我的應用程序中,我測試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 

,你應該有自己的插件測試的一個例子