#django #api #mocking #pytest #testcase
#django #API #издевательство #pytest #testcase
Вопрос:
Я хочу протестировать представление django, которое включает вызов внешнего API. Вызов API завершается другим пакетом (jira). При вызове представления создается билет jira для проекта (модели). Как бы мне правильно протестировать представление, не допуская при этом вызова внешнего API. Представление выглядит следующим образом:
class RequestHelp(View):
def get(self, context, pk=None, **response_kwargs):
# get the project to create the ticket for
project = Project.objects.get(id=pk)
# initialize the jira client
jira = JIRA(
server=settings.JIRA_URL,
basic_auth=(settings.JIRA_USERNAME, settings.JIRA_PASS),
)
# create the ticket in jira
new_issue = jira.create_issue(
project=settings.JIRA_PROJECT,
summary= project.title ,
description="Would you please be so nice and help me",
reporter={"name": "My User"},
issuetype={"name": "An Issue"},
)
return HttpResponseRedirect("/")
Тест на данный момент выглядит так:
class TestRequestHelp(TestCase):
@classmethod
def setUpTestData(cls):
cls.std_user = User.objects.create_user(
username="john",
email="john@doe.de",
password="secret",
is_staff=False,
is_superuser=True,
)
def test_get_help_logged_in(self):
self.client.login(username="john", password="secret")
project, status = Project.objects.get_or_create(title="Test")
response = self.client.get(f"/project/help/{project.pk}", follow=True)
self.assertEqual(200, response.status_code)
«Обычный» тест представления работает, но всегда создает билет, который нежелателен. Любая помощь в этом будет оценена.
Структура папок проста. Оба файла находятся в одном каталоге (приложение django). Так что это:
jira_integration
- views.py
- tests.py
Комментарии:
1. Вы можете
mock
create_issue
выполнить вызов при выполнении теста. Можете ли вы поделиться своей структурой каталогов?2. Хорошо, теперь я добавил структуру папок в исходное сообщение. Достаточно ли этого?