2013-03-13 38 views
0

我正在嘗試爲API編寫RSpec測試。從RSpec訪問控制器的父類功能

設置: 爲了保持一致,我們有一個格式化函數,它的響應,使一個很好的JSON對象,所以一切都是一致的。 E.g.-簡化此示例:

def format (status, message) 
    {status: status, 
    message: message} 
end 

該功能是在鹼控制器,所有的API控制器從繼承聲明。

我想什麼: 當我測試的API控制器我想測試控制器給了我預期的結果,但我不希望測試JSON響應的實際格式。如在,我想檢查傳遞給格式函數的參數是我所期望的,但我不想檢查實際返回的函數。 (我正在計劃在另一個測試中測試這個函數,如果對JSON格式的更改不會影響API的每個測試,我都會很喜歡它,如果這不是很好的做法,請隨時告訴我。 )

我的問題: 有沒有什麼辦法,我訪問格式功能從基本控制器在當前API spec文件?或者,有沒有一種方法可以讓我將它存根並獲取傳遞給它的參數,以便我可以檢查它們是否正確?

相關:How to check for a JSON response using RSpec?

回答

1

聽起來你正在試圖做這樣的事情在你的控制器規格:

let(:status) { function1(params_hash) } 
let(:message { function2(params_hash) } 
it "does something something" do 
    model.should_receive(:format).with(status, message) 
    get :action, params_hash 
end 

如何定義狀態和消息從params_hash計算是由你。我所做的是想到各種路徑,併爲每一條路徑編寫測試。如:

context "when id is missing in the params" do 
let(:status) { 404 } 
let(:message) { "Not found" } 
let(:params_hash) { {:id => nil} } 

context "when id is correct" do 
    let(:status) { 200 } 
    let(:message) { "OK" } 
    let(:params{hash) { {:id => 1 } }