Насмешка над классом в Flask API - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть три файла

helper.py

class helper:
    def __init__(self, out_file):
    self.out_file = out_file
    def foo(first, second):
        # Write data to file

flask_API.py

from helper import helper

@app.route('/', methods=['POST'])
def parse_request():
    content = request.get_json()

    out_file = #based on timestamp

    helper(out_file).foo(content['first'], content['second'])

test_ flask .py

import unittest
from unittest.mock import patch
import flask_API

class testFlaskAPI(unittest.TestCase):
    def setUp(self):
        self.app = flask_API.app.test_client()
        self.app.test = True

    @patch('flask_API.app.helper', return_value=None)
    def test_service(self, mock_helper):
        response = self.app.post(base_url, data=json.dumps({"some":"value"}, content_type='application/json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

У меня проблемы с издевательством над классом помощника. Это дает мне ошибку, говорящую

AttributeError: <Flask 'flask_API'> does not have the attribute 'helper'

Я прочитал, что класс / метод должен быть смоделирован там, где он вызывается, а не там, где он определен. Что-то не так с тем, как я исправляю класс?

1 Ответ

0 голосов
/ 20 февраля 2020

В итоге решение оказалось довольно простым. Сначала не было необходимости добавлять app в @patch декоратор. Тест просто нужен @patch('flask_API.helper'). Во-вторых, мне сначала нужно было вернуть макет класса, а затем смоделировать вызов функции. Таким образом, окончательный ответ оказался

@patch('flask_API.helper')
def test_service(self, mock_helper):

    mocking_helper = mock_helper.return_value  # mocking the class
    mocking_helper.foo.return_value = None

    response = self.app.post(base_url, data=json.dumps({"some":"value"}, content_type='application/json')
    self.assertEqual(response.status_code, status.HTTP_200_OK)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...