2016-08-15 81 views
0

我有一個控制器應該只接受應用程序/ json或/。我檢查這個控制器類:如何測試僅JSON控制器返回406

... 
include ActionController::MimeResponds 

before_action :require_json 

def require_json 
    respond_to :json 
end 
.... 

這工作得很好,雖然有每一個客戶端使用一個無效的接受頭部的時間是UnknownFormat錯誤在日誌中。控制器正確返回HTTP 406不可接受。

在測試我寫:

... 
test 'do not accept plain text' do 
    assert_raises ActionController::UnknownFormat do 
    get '/api/v1/ping', headers: {'Accept' => 'text/plain'} 
    end 
    assert_response :not_acceptable 
... 

然後在耙與accept_response未定義的方法錯誤中止由於響應爲零。我認爲沒有設置正常的執行流程會在未知格式異常中中止。但是如果我沒有斷言這個例外,那麼測試將會隨着它而中止。

每隔406個時候拋出異常是個好主意嗎?我怎樣才能測試,我得到了一個406返回?

+0

這只是我的意見,但我不會在這種情況下,產生異常。我一定會將其傳播回JSON接口的客戶端,並讓他們根據其設計和業務邏輯對其做出反應。 – jaydel

回答

0
+0

這會產生相同的錯誤。我認爲代碼不是問題,但在執行assert_raises時,響應對象是零。但是,如果我沒有發現異常,測試將中止。 – anselm

+0

你可能是對的。如果你的回答是零,你正在做一些亂七八糟的事情。對不起,我無法幫助更多,但我會再次檢查出來 – Vangel

相關問題