2014-02-17 2 views
-1

Im настраивает проект с помощью Google App Engine в python.Тест на 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) 

Im пытаясь узнать, как работать с TDD путь, поэтому я проверил get следующий this например, Google.

имеет тестовый случай

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

exception is being raised для любого ответа, который не является кодом состояния 2xx или 3xx.

Вы утверждаете, что он поднимается вместо:

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_errors в True:

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 e, если статус ответа не был 405. status здесь может быть списком или кортежем статусов.

+0

Спасибо за эту ссылку. Я использовал ваше второе предложение, потому что оно лучше подходит для моего текущего кода и работает –

+0

@TimCastelijns: добавлен еще один вариант для вас. –

+0

еще лучше, спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^