2016-08-09 92 views
1

如果我的RSpec的測試我有如何獲取查詢以返回我的模擬對象?

foo = mock_model(Foo, id: 1) 

&我的代碼運行

Foo.where(id: 1) 

我的代碼將永遠無法爲mock_modelfoo永遠不會屬於富收藏,例如

Foo.count # => 0 

如果我跑foo.instance_of?(Foo)我得到true這樣的行爲是正確的。我錯過了什麼?我想依靠真正的模擬&不必依賴FactoryGirl或實例化Foo本身的對象。

回答

1

首先,沒有使用FactoryGirl做得很好。您的測試將變得更快,因爲您正在減少測試到達數據庫的次數。但這種做法需要毅力。

現在,一旦你使用mock_model,你將需要存儲你的模擬器上調用的所有方法。

這意味着您將無法調用Foo.where(id:1),因爲這是不包含新創建的foo的模型對象。記住foo是一個模擬對象,它不會寫入您的數據庫。

所以你得到的'異常'不是一個異常。它告訴你,你的嘲弄對象foo,有一個形式Foo,當然它是。但是你的模擬不會保存到數據庫中。因此Foo.count返回0

要完成你的測試,你需要說沿着這些線路

allow(Foo).to receive(where).with(id: 1).and_return(foo)

我希望這有助於

東西幹掉你的斷言
相關問題