Как смоделировать и протестировать представление django, включая внешний вызов api

#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. Хорошо, теперь я добавил структуру папок в исходное сообщение. Достаточно ли этого?