2013-10-17 105 views
0

我想存根查詢的結果來檢索一些記錄。下面是該查詢:rspec存根記錄查詢

ouid = OrganizationalUnit.where("billing_id = ? AND status = 'active'", data[:billing_id]).select(:id) 
user_id = User.where("group_id in (14,17) AND organizational_unit_id in (?) AND status = 'active'", ouid).select(:id).first 

我想這個存根它:

ou_value = double'fake ou',{ 'id' => '654321' } 
    select_double = double 'fake select', {'select' => [ou_value]} 
    OrganizationalUnit.stub(:where).and_return(select_double) 

這是行不通的。我的用戶表查詢看起來是這樣的:

SELECT id FROM `users` WHERE (group_id in (14,17) AND organizational_unit_id in ('--- !ruby/object:RSpec::Mocks::Mock\n__null_object: false\nname: fake ou\noptions:\n :__declared_as: Double\n') AND status = 'active') LIMIT 1 

,它應該是這樣的:

SELECT id FROM `users` WHERE (group_id in (14,17) AND organizational_unit_id in (654321) AND status = 'active') LIMIT 1 

我在做什麼錯?

感謝

回答

1

所以要存根此查詢:

OrganizationalUnit.where("billing_id = ? AND status = 'active'", data[:billing_id]).select(:id) 

我想這應該是

OrganizationalUnit.stub_chain(:where, :select).and_return(654321) 

另一件事:它總是方法中移動發現者是一個好主意或範圍在模型中。通過這樣做,它更容易殘留或嘲笑的東西進行測試。

+0

完美謝謝 – rstewart8