Как смоделировать функцию в другом методе, вызываемом с помощью pytest - PullRequest
1 голос
/ 07 ноября 2019

У меня есть следующая структура для проекта

myapp
|
 -contrib
   |
   - helpers.py
 - views
   |
   - app_view.py

В helpers.py У меня есть следующий метод

def method(**kwargs) -> int:
    # Some code here
    requests.post(
            url=f"{REMOTE_SERVER}/sc",
            json=kwargs,
            timeout=5
        )

В app_view.py У меня есть следующая реализация. Я вызываю метод внутри потока, и мне нужно смоделировать его с помощью pytest, чтобы проверить, вызывается ли он один раз и вызывается с определенным количеством параметров.


import myapp.contrib.helpers import method


class Score(MethodView):


    @prepare_req
    def post(self, **kwargs):
        """
        Post Score
        """
        response_data = dict()
        # Some logic here
        self.filter_score(kwargs)

        return jsonify(response_data)

    def filter_score(self, **kwargs)
        thread = threading.Thread(target=method, kwargs=event_data)
        thread.start()

Использование pytest Я пытаюсь смоделироватьmethod() следующим образом.

def test_score(client, mocker): 
    url = "sc/1.1/score"
    patched_method = mocker.patch(
        "myapp.contrib.helpers.method"
    )

    client.post(url, json=issue_voucher_post_data)
    patched_method.assert_called_once() # <- this is getting false and not mocking the method

Пробовал также и ниже, но он не исправится должным образом

patched_method = mocker.patch(
        "myapp.views.app_view.method"
    )

Но он вызовет соответствующее представление

Как издеватьсяфункция, используемая внутри потока в представлении, которое доступно в другом модуле, использующем pytest?

...