Я пытаюсь использовать DRF-тестирование впервые, поэтому я создал следующий TestCase:
class TestInventoryActionInputNoSeriable(TestCase):
def setUp(self):
self.repository = create_repository()
self.not_seriable_product = create_not_seriable_product()
def test_post_inventory_input_not_seriable(self):
client = APIClient()
response = client.post('/api/inventory/execute_action/', {
'action': 'input',
'repository': self.repository.id,
'product': self.not_seriable_product.id,
'amount': 1,
})
self.assertEqual(response.status_code, 200)
inventory_actions = models.InventoryAction.objects.all()
inventory_inputs = models.InventoryInput.objects.all()
kardexs = models.Kardex.objects.all()
self.assertEqual(len(inventory_actions), 1)
self.assertEqual(len(inventory_inputs), 1)
self.assertEqual(len(kardexs), 1)
inventory_action = inventory_actions.first()
inventory_input = inventory_inputs.first()
kardex = kardexs.first()
self.assertEqual(inventory_action.action_content_type.model, 'inventoryinput')
self.assertEqual(inventory_action.action_object_id, inventory_input.id)
self.assertEqual(kardex.type, models.KARDEX_INPUT)
self.assertEqual(kardex.repository_id, self.repository_id)
self.assertEqual(kardex.product_id, self.not_seriable_product.id)
self.assertEqual(kardex.amount, 1)
self.assertEqual(kardex.stock, 1)
Но я получаю следующий результат:
(TCDigitalVenv) MacBook-Pro-de-Hugo:TCDigital hugovillalobos$ python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_post_inventory_input_not_seriable (inventory.tests.TestInventoryActionInputNoSeriable)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/hugovillalobos/Documents/Code/TCDigitalProject/TCDigitalBackend/TCDigital/inventory/tests.py", line 31, in test_post_inventory_input_not_seriable
self.assertEqual(response.status_code, 200)
AssertionError: 401 != 200
----------------------------------------------------------------------
Ran 1 test in 0.083s
FAILED (failures=1)
Destroying test database for alias 'default'...
Что означает, что запрос был отклонен из-за ошибки аутентификации. Я следовал Документация по аутентификации DRF :
def test_post_inventory_input_not_seriable(self):
token = Token.objects.get(user__username='admin')
client = APIClient()
client.credentials(HTTP_AUTHORIZATION='token '+token.key)
response = client.post('/api/inventory/execute_action/', {
'action': 'input',
'repository': self.repository.id,
'product': self.not_seriable_product.id,
'amount': 1,
})
self.assertEqual(response.status_code, 200)
...
Но я получаю эту ошибку:
(TCDigitalVenv) MacBook-Pro-de-Hugo:TCDigital hugovillalobos$ python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_post_inventory_input_not_seriable (inventory.tests.TestInventoryActionInputNoSeriable)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/hugovillalobos/Documents/Code/TCDigitalProject/TCDigitalBackend/TCDigital/inventory/tests.py", line 23, in test_post_inventory_input_not_seriable
token = Token.objects.get(user__username='admin')
File "/Users/hugovillalobos/Documents/Code/TCDigitalProject/TCDigitalBackend/TCDigitalVenv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/hugovillalobos/Documents/Code/TCDigitalProject/TCDigitalBackend/TCDigitalVenv/lib/python3.7/site-packages/django/db/models/query.py", line 408, in get
self.model._meta.object_name
rest_framework.authtoken.models.Token.DoesNotExist: Token matching query does not exist.
----------------------------------------------------------------------
Ran 1 test in 0.046s
FAILED (errors=1)
Destroying test database for alias 'default'...
Я не знаю, нужно ли мне создавать пользователя каждый раз, когда я Запустите тест, если есть способ избежать проверки подлинности для тестирования.