Макет flask .g в юнит-тесте после запроса - PullRequest
0 голосов
/ 17 января 2020

Вот test.py, где с помощью mock_service я издеваюсь над курсором и дБ, но каждый раз получаю 'function' object has no attribute 'cursor'. Как правильно издеваться над объектом flask .g. Я сослался на эту статью

test.py
def not_a_db_hit():
     print('I did not hit the DB')
     return object()

class MyTestCase(unittest.TestCase):

@mock.patch('utils.configure_db') #configure_db returns database
@mock.patch('Service.g')
def test_insert_cricket_data(self, mock_service, mock_db):
    with app.app_context():
        body = {
            'key1': 'value1'
        }
        headers = {
            'Content-Type': 'application/json',
        }

        mock_db.return_value = not_a_db_hit
        mock_service.cursor.return_value = not_a_db_hit
        mock_service.cursor.execute.return_value = None
        mock_service.db.commit.return_value = None
        response = self.app.post('/insertvalue', headers=headers.items(), data=json.dumps(body))
        print(response)

Вот мой Service.py файл

from flask import g 

@service.before_request
def before_request():
    g.db = configure_db()
    g.cursor = g.db.cursor()

@service.route('/insertvalue', methods=['POST'])
def in_request():
    ....
    try:
        g.cursor.execute(sql, main_values)
        g.db.commit()
        return make_response("Created", 201)

Любая помощь, приветствуется. Спасибо

...