我一直無法找到任何此類情況。我定義它有一個名爲範圍的模型正是如此:在RSpec控制器中扼殺named_scope
class Customer < ActiveRecord::Base
# ...
named_scope :active_customers, :conditions => { :active => true }
end
和我試圖存根它在我的控制器規格:
# spec/customers_controller_spec.rb
describe CustomersController do
before(:each) do
Customer.stub_chain(:active_customers).and_return(@customers = mock([Customer]))
end
it "should retrieve a list of all customers" do
get :index
response.should be_success
Customer.should_receive(:active_customers).and_return(@customers)
end
end
這不是工作和失敗,他說,客戶期望active_customers但收到0次。在我的實際控制人索引行動中,我有@customers = Customer.active_customers
。我錯過了什麼讓這個工作?可悲的是,我發現編寫代碼比編寫測試/規範更容易,並且寫出來,因爲我知道規範描述的內容,而不是如何告訴RSpec我想做什麼。
謝謝您的解釋(我在下面的一個RSpec教程,但是它是如何顯示到用模擬/存根執行操作)。然而,當我嘗試你發佈的代碼時,我得到了同樣的錯誤: expected:active_customers(任何參數)一次,但收到0次。儘管在CustomersController#index中調用了Customer.active_customers。 –
2009-10-28 19:57:55
對不起,我的壞。對'get:index'的調用應該在消息期望之後。我正在糾正答案,以便期望成爲規範中的第一行。 – hgmnz 2009-10-28 20:45:32
好的,現在正在工作。我習慣於正常的測試過程,get:index在測試之前出現,所以這似乎是問題。它與RSpec相反。我想我需要更多練習RSPec。謝謝! – 2009-10-29 12:50:11