2016-12-28 9 views
1

У меня есть тест django_rest_framework (проблема такая же, с регулярным испытанием Джанго), который выглядит следующим образом:Джанго тест печати или войти отказ

from rest_framework.test import APITestCase 

class APITests(APITestCase): 

    # tests for unauthorized access 
    def test_unauthorized(self): 
     ... 
     for api in apipoints: 
      response = self.client.options(api) 
      self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

У меня есть URL-адрес, который не терминал показывает это:

FAIL: test_unauthorized (app.misuper.tests.APITests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/alejandro/...",

line 64, in test_unauthorized

self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) AssertionError: 200 != 403

Хорошо, как я могу узнать, какой url не прошел тест? Я повторяю все URL-адреса, которые требуют входа в систему, то есть много URL-адресов, как я могу напечатать тот, который не прошел тест?

ответ

1

Для простого быстрого исправления, вы можете передать apipoint в третьем параметре методы утверждения:

>>> from unittest import TestCase 
>>> TestCase('__init__').assertEqual(1, 2, msg='teh thing is b0rked') 
AssertionError: teh thing is b0rked 

В духе модульного тестирования, они должны быть действительно каждые различными методами испытаний, а не только один тестовый метод с петлей. Обратитесь к nose_parameterized за помощью в создании более СУХОЙ. Вы будете декорировать метод испытания, как это:

from nose_parameterized import parameterized 

@parameterized.expand(apipoints) 
def test_unauthorized(self, apipoint): 
    response = self.client.options(apipoint) 
    self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

декоратор будет генерировать различные методы испытаний для каждой конечной точки, так что они могут годен/не годен независимо друг от друга.

Хотя этот пакет имеет nose на имя, it's also compatible with other runners таких как unittest и py.test.