AR7
AR7

Reputation: 376

Mocking MongoDB for Testing REST API designed in Flask

I have a Flask application, where the REST APIs are built using flask_restful with a MongoDB backend. I want to write Functional tests using pytest and mongomock for mocking the MongoDB to test the APIs but not able to configure that. Can anyone guide me providing an example where I can achieve the same? Here is the fixture I am using in the conftest.py file:

@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()

and here is the the test function for testing a post request for the creation of the user:

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

The issue is that instead of using the testdb, pytest is creating the user in the production database. is there something missing in the configuration?

Upvotes: 2

Views: 1565

Answers (0)

Related Questions