2012-05-24 99 views
2

我正在爲服務器錯誤編寫API測試用例。我想存根控制器操作來引發錯誤以模擬服務器錯誤(500)。 在請求規範中,未設置controller變量。RSpec請求規範中的控制器操作

it "Should return 500 upon server error" do 
    controller.stub(:index).and_raise(ArgumentError) 
    get "/users.json" 
    response.code.should eq("500") 
end 
+1

控制器規格的請求規格? – apneadiving

+1

我認爲@apneadiving是正確的,作爲控制器測試沒有任何意義。你正在琢磨你應該測試的整個方法。 – tokland

+0

@apneadiving我的API測試規範是作爲請求規範實現的,幾乎所有的測試用例都是真正的請求規範。只有一種情況是混合的,因爲我需要在服務器錯誤時檢查錯誤代碼。我需要存根,因爲我無法觸發服務器錯誤。有沒有其他的方法來測試這個(除了使用控制器規範) –

回答

4

我最終使用any_instance來扼殺控制器方法。

it "Should return 500 upon server error" do 
    UsersController.any_instance.stub(:index).and_raise(ArgumentError) 
    get "/users.json" 
    response.code.should eq("500") 
    response.body.should have_json_path("error") 
end 

注:請求規範

打樁控制器方法沒有意義。但是......在這種情況下,我使用請求規格套件作爲驗收標準。其中一個要求是確保所有錯誤代碼和消息都與API設計相匹配。我能夠誘使服務器提出API設計中指定的所有HTTP錯誤代碼。唯一的例外是internal server error(i.e. 500)。我沒有辦法誘使控制器提出這個錯誤。因爲,我正在測試錯誤回覆,並且由於這個回覆獨立於我決定存根的異常的位置和來源。

+0

擁有第一行'... any_instance.stub ...',你是否還需要第二行來重新存根'controller'變量? – PeterWong

+0

@PeterWong謝謝注意,剪切和粘貼錯誤.. –

0

它實際上是一個實例變量:@controller

+0

'@ controller'在請求規範中的請求之前是零。我會遠離它。 –

+0

哦。那麼我顯然將不得不推遲到你的專業知識! – MrDanA

相關問題