Home > database >  Create a document in beforeEach on Jest nest.js
Create a document in beforeEach on Jest nest.js

Time:03-01

I'm Using the in memory mongoose database for create my Unit test, and I want to create a document before the tests. My interface is:

export interface IUsers {
  readonly name: string;
  readonly username: string;
  readonly email: string;
  readonly password: string;
}

and my beforeEach is:

 import { MongooseModule } from "@nestjs/mongoose";
 import { Test, TestingModule } from "@nestjs/testing";
 import { closeInMongodConnection, rootMongooseTestModule } from '../test-utils/mongo/MongooseTestModule';
 import { User, UserSchema } from "./schemas/users.schema";
 import { UsersService } from "./users.service";

describe("UsersService", () => {
    let service: UsersService;
      let testingModule: TestingModule;
      let userModel: Model<User>;
    
      
      beforeEach(async () => {
        const module: TestingModule = await Test.createTestingModule({
          imports: [
            rootMongooseTestModule(),
            MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
          ],
          providers: [UsersService],
        }).compile();
    
        service = module.get<UsersService>(UsersService);
    
        //create user    
        userModel = testingModule.get<Model<User>>(
          'UserModel',
        );
      });

I get an error TypeError: Cannot read pro perties of undefined (reading 'get') during the test. I tried to use let userModel: Model<IUsers>; But I get the same error.

CodePudding user response:

Use either testingModule or module.

You declared testingModule but never initialized.

let testingModule: TestingModule; This part is undefined unless something is assigned to it.

Try like this

describe('UsersService', () => {
  let testingModule: TestingModule;
  let userModel: Model<User>;
  let userService: UserService;

  beforeEach(async () => {
    testingModule = await Test.createTestingModule({
      imports: [
        rootMongooseTestModule, 
        MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])],
      providers: [UsersService],
    }).compile();

    userService = testingModule.get<UsersService>(UsersService);
    userModel = testingModule.get<Model<User>>('UserModel');
  // await userModel.create(...) or whatever methods you have
  });
});
  • Related