Django тестирование views.py и model.py
Я новичок в тестировании django, я делаю тестирование для моего файла views.py, который содержит много классов. Здесь мы берем один из классов среди других. файл views.py выглядит следующим образом
class AssignSubFarmer(viewsets.ViewSet):
permission_classes = [permissions.AllowAny]
http_method_names = ['patch', 'post']
serializer_class = BatchSerializer
queryset = Farm.objects.all()
def create(self, request, *args, **kwargs):
header = {'Content-Type': 'application/json', 'Authorization': request.headers['Authorization']}
farm_id = request.data.get('farm_id', None)
batch_id = request.data.get('batch_id', None)
subfarmer_id = request.data.get('user_id', None)
mobile = request.data.get('mobile', None)
name = request.data.get('name', None)
document_photo = request.data.get('document_photo', None)
user_type = request.data.get('user_type', None)
aadhar_number = request.data.get('aadhar_number', None)
pancard = request.data.get('pancard', None)
voter_id = request.data.get('voter_id', None)
gst_no = request.data.get('gst_no', None)
primary_user_id = request.data.get('primary_user_id', None)
if not subfarmer_id:
payload = {
"name": name,
"mobile": mobile,
"document_photo": document_photo,
"user_type": user_type,
"aadhar_number": aadhar_number,
"pancard": pancard,
"voter_id": voter_id,
"gst_no": gst_no
}
response = requests.post(url=settings.CREATE_SUB_FARMER.format(primary_user_id), data=json.dumps(payload),
headers=header)
data = json.loads(response.content)
secondary_user_id = None
if not data['error'] and data['data']:
secondary_user_id = data['data'].get('secondary_user_tbl_id', None)
else:
return Response({"message": data['message'], "error": data['error']}, status=status.HTTP_200_OK)
subfarmer_id = 0
if secondary_user_id:
subfarmer_id = secondary_user_id
if farm_id and subfarmer_id:
Batch.objects.filter(farm_id=farm_id).update(sub_farmer_id=subfarmer_id)
elif batch_id and subfarmer_id:
Batch.objects.filter(id=batch_id).update(sub_farmer_id=subfarmer_id)
elif farm_id:
Batch.objects.filter(farm_id=farm_id).update(sub_farmer_id=subfarmer_id)
elif batch_id:
Batch.objects.filter(id=batch_id).update(sub_farmer_id=subfarmer_id)
return Response({"message": "Successfully updated", "error": "False"}, status=status.HTTP_200_OK)
и когда я провожу тестирование для этого класса в файле test_views.py
from django.urls import reverse
from rest_framework import status
from rest_framework.authtoken.models import Token
from rest_framework.test import APITestCase
from igrow.urls import *
from farm_management.models import *
from django.contrib.auth.models import User
import json
class TestAssignSubFarmer(APITestCase):
def test_assign(self):
sample = {"farm_id": "123", "batch_id": "1222",}
response = self.client.get(reverse('assignsubfarmer'),sample)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
В терминале, когда я даю команду test
python manage.py test test_model.py
Выдает ошибку
UserWarning: The default behavior of S3Boto3Storage is insecure and will change in django-storages 2.0. By default files and new buckets are saved with an ACL of 'public-read' (globally publicly readable). Version 2.0 will default to using the bucket's ACL. To opt into the new behavior set AWS_DEFAULT_ACL = None, otherwise to silence this warning explicitly set AWS_DEFAULT_ACL.
warnings.warn(
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_model (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: test_model
Traceback (most recent call last):
File "/usr/lib/python3.8/unittest/loader.py", line 154, in loadTestsFromName
module = __import__(module_name)
ModuleNotFoundError: No module named 'test_model'
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
На этом рисунке показан каталог файлов, которые расположены таким образом
Похоже, что ваш файл называется test_models.py
и вы вызываете test_model.py
(в единственном числе).
Вот официальная документация о том как запустить только один файл / конкретный тесткейс / конкретный тест.
Для вашего конкретного случая я бы попробовал выполнить python manage.py test farm_management.test.test_models
(это просто предположение, основанное на документации, я не проверял это на самом деле).
Помимо этого, похоже, что вы используете Pycharm. В нем есть встроенный механизм для запуска тестов, поэтому вам не нужно вручную вводить точечный путь каждый раз, когда вы хотите запустить определенный тест. Он позволяет запускать конкретный тест или весь тесткейс, и выглядит следующим образом: