DEV Community

Discussion on: Unit testing NestJS with mongo in memory...

bassochette profile image
Julien Prugne Author • Edited on

You don't need to clear collection between tests since it's a new in-memory mongo.

during the test I do something like that:

beforeEach(async () => {
      const myModel = module.get<Model<someDocument>>('MyModel')
      await myModel.deleteMany({});
});
Enter fullscreen mode Exit fullscreen mode

like the service in the test, the module needs to be accessible.

Thread Thread
chromey profile image
Christian Romeyke • Edited on

Could you maybe provide a full example of that? I tried to get this working in my own repo and in yours, using the Squid model, but got an error in both cases: Nest could not find Squid element (this provider does not exist in the current context). Much appreciated!

Thread Thread
bassochette profile image
Julien Prugne Author

You can check my Colonie repo. The pvp-shield module have the in memory db, collection deletion between it and the way to get the model from the testing module.
github.com/bassochette/colonies/tr...

Thread Thread
chromey profile image
Christian Romeyke

Thanks a lot, I managed to do it! For others who might struggle: I wasn't aware of the convention for the model name to use in module.get(). It's the name property that gets passed into MongooseModule.forFeature() + the suffix 'Model' (SquidModel in this example). Apologies if this obvious, but this string is never explicitly defined as a constant or class name etc.

Thread Thread
bassochette profile image
Julien Prugne Author

Oh, that's really not obvious...
I found this trick by mimicking the underlying metod of InjectModel from the nest/mongoose repo.
github.com/nestjs/mongoose/blob/28...