2.12. Use mongomock for testing

Although we recommend running your tests against a regular MongoDB server, it is sometimes useful to plug MongoEngine to alternative implementations (mongomock, montydb, mongita, etc).

mongomock is historically the one suggested for MongoEngine and is a package to do just what the name implies, mocking a mongo database.

To use with mongoengine, simply specify mongomock when connecting with mongoengine:

import mongomock

connect('mongoenginetest', host='mongodb://localhost', mongo_client_class=mongomock.MongoClient)
conn = get_connection()

or with an alias:

connect('mongoenginetest', host='mongodb://localhost', mongo_client_class=mongomock.MongoClient, alias='testdb')
conn = get_connection('testdb')

2.12.1. Example of test file:

import unittest
from mongoengine import connect, disconnect

class Person(Document):
    name = StringField()

class TestPerson(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        connect('mongoenginetest', host='mongodb://localhost', mongo_client_class=mongomock.MongoClient)

    @classmethod
    def tearDownClass(cls):
       disconnect()

    def test_thing(self):
        pers = Person(name='John')
        pers.save()

        fresh_pers = Person.objects().first()
        assert fresh_pers.name ==  'John'