2014-02-17 174 views
-1

我在python中用Google App Engine設置項目。測試HTTP 405不允許

在它只是看起來像這樣

class MainPage(webapp2.RequestHandler): 

def get(self): 
    self.response.headers['Content-Type'] = 'text/plain' 
    self.response.write('Hello World!') 

application = webapp2.WSGIApplication([ 
    ('/', MainPage), 
], debug=True) 

我試着去學習如何工作的TDD方式的時刻,所以我下面this例如通過谷歌測試的get

它有這個測試用例

def test_MainPage_get(self): 
    response = self.testapp.get('/') 
    self.assertEqual(response.status_int, 200) 

這偉大工程,預期將返回200。然後我想我應該測試post以及。我試圖測試它是這樣的

def test_MainPage_post(self): 
    response = self.testapp.post('/') 
    self.assertEqual(response.status_int, 405) 

因爲發佈沒有實現我期望它返回狀態405和測試用例報告成功。但控制檯顯示這一點,並退出

The method POST is not allowed for this resouce. 

------------------------------------------------ 
Ran 2 tests in 0.003s 

FAILED (errors=1) 

爲什麼它停在那裏,並沒有返回405到我的測試用例?我做錯了嗎?是否有其他(更好)的方法來測試method not allowed代碼?

+0

這大概是使用[WebTest](http://webtest.pythonpaste.org/en/latest/)? –

+0

@Martijn是的,忘了提及 –

回答

4

對於不是2xx或3xx狀態碼的任何響應,exception is being raised

你斷言,它被提出來代替:

def test_MainPage_post(self): 
    with self.assertRaises(webtest.AppError) as exc: 
     response = self.testapp.post('/') 

    self.assertTrue(str(exc).startswith('Bad response: 405') 

另外,設置expect_errorsTrue

def test_MainPage_post(self): 
    response = self.testapp.post('/', expect_errors=True) 
    self.assertEqual(response.status_int, 405) 

或告訴post方法指望405:

def test_MainPage_post(self): 
    response = self.testapp.post('/', status=405) 

其中AppError會b如果響應狀態不是405,則引發e。status這裏可以是狀態的列表或元組。

+0

感謝您的鏈接。我使用了你的第二個建議,因爲它更適合我當前的代碼,它的工作原理 –

+0

@TimCastelijns:在那裏增加了一個選項。 –

+0

更好,謝謝 –