Имитирующий MongoDB для тестирования REST API, разработанного в Flask

#mongodb #flask #pytest #flask-restful #mongomock

#mongodb #flask #pytest #flask-restful #mongomock

Вопрос:

У меня есть приложение Flask, где REST API создаются с использованием flask_restful с серверной частью MongoDB. Я хочу написать функциональные тесты, используя pytest и mongomock для издевательства над MongoDB для тестирования API, но не могу это настроить. Кто-нибудь может подсказать мне, приведя пример, где я могу достичь того же? Вот приспособление, которое я использую в conftest.py файл:

 @pytest.fixture(scope='module')
   def test_client():
    # flask_app = Flask(__name__)
 
    # Flask provides a way to test your application by exposing the  Werkzeug test Client
    # and handling the context locals for you.
    testing_client = app.test_client()
 
    # Establish an application context before running the tests.
    ctx = app.app_context()
    ctx.push()
 
    yield testing_client  # this is where the testing happens!
 
    ctx.pop()
@pytest.fixture(autouse=True)
def patch_mongo():
    db = connect('testdb', host='mongomock://localhost')
    
    yield db
    db.drop_database('testdb')
    disconnect()
    db.close()
  

и вот тестовая функция для тестирования post-запроса на создание пользователя:

 def test_mongo(test_client,patch_mongo):
    headers={
        "Content-Type": "application/json",
        "Authorization": "token"
    }
    response=test_client.post('/users',headers=headers,data=json.dumps(data))
    print(response.get_json())

    assert response.status_code == 200
  

Проблема в том, что вместо использования testdb pytest создает пользователя в рабочей базе данных. чего-то не хватает в конфигурации?

Комментарии:

1. Не могли бы вы опубликовать код, который вы пробовали, и какие ошибки вы получаете?

2. Я добавил код, который пробовал

3. Вы не исправляете mongo, вы просто создаете новое соединение и возвращаете его, но никогда не используете. Вам нужно исправить то, где он используется. Как ваш нетестовый код использует / создает подключение к БД?

4. нетестовый код использует pymongo для подключения к Mongodb