开玩笑测试使用 Neo4J 和 MongoDb 的服务返回错误:“TypeError:无法读取未定义的属性(读取‘inspectModules’)”

Mis*_*QvD 1 testing mongodb neo4j typescript jestjs

我有一个对 Mongodb 和 Neo4j 运行查询的服务。create 方法运行两个方法:“CreateUserInMongoDB”和“CreateUserInNeo4j”。代码如下:

export class UserService {
  constructor(
    @InjectModel('User') private readonly userModel: Model<UserDocument>,
    @InjectModel('SportEvent')
    private readonly sportEventModel: Model<SportEventDocument>,
    private readonly neo4jQueryService: Neo4jQueryService
  ) {}

  //creating a user.
  async create(user: User): Promise<object> {
    let userInMongoDB: { mongoId: string; firstName: string };
    try {
      userInMongoDB = await this.createUserInMongoDB(user);
      const userIncreaeNeo4j = await this.createUserInNeo4j(
        userInMongoDB.firstName,
        userInMongoDB.mongoId
      );
      if (userIncreaeNeo4j && userInMongoDB) {
        return {
          statusCode: 201,
          message: `User succesfully created`,
        };
      }
    } catch (error) {
      if (userInMongoDB) {
        await this.userModel.findByIdAndDelete(userInMongoDB.mongoId).lean();
      }
      throw new HttpException(error.message, 400);
    }
  }

  //create user in mongoDB
  async createUserInMongoDB(
    user: User
  ): Promise<{ mongoId: string; firstName: string }> {
    try {
      const createdUser = new this.userModel(user);
      createdUser.email = user.email.toLowerCase();
      createdUser.firstName = user.firstName.toLowerCase();
      createdUser.lastName = user.lastName.toLowerCase();

      console.log(user);

      await createdUser.save();
      const userInMongoDB = {
        mongoId: createdUser._id.toString(),
        firstName: createdUser.firstName,
      };
      return userInMongoDB;
    } catch (error) {
      if (error.code === 11000) {
        throw new HttpException(
          'Duplicate entry, email has to be unique.',
          409
        );
      } else {
        throw new HttpException(error.message, 400);
      }
    }
  }

  //create user in neo4j
  async createUserInNeo4j(userName: string, userId: string): Promise<boolean> {
    try {
      await this.neo4jQueryService.write(
        `CREATE (n:User {mongoId: "${userId}", name: "${userName}"}) RETURN n`
      );
      return true;
    } catch (error) {
      throw new HttpException(error.message, 400);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我正在尝试测试上面的代码。我想做的测试很简单,我只想测试 userService 是否已定义:

import { Test, TestingModule } from '@nestjs/testing';
import { getModelToken } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { UserService } from '../user.service';
import { Neo4jQueryService } from '../../../neo4-j/neo4-j.service';
import { UserDocument } from '../../Schemas/user.schema';
import { User } from '@sport-activity-app/domain';
import { HttpException } from '@nestjs/common';

describe('UserService', () => {
  let userService: UserService;
  let userModel: Model<UserDocument>;
  let neo4jQueryService: Neo4jQueryService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        UserService,
        Neo4jQueryService,
        {
          provide: getModelToken('User'),
          useValue: {
            // mock Mongoose Model methods used in the UserService class
            findByIdAndDelete: jest.fn(),
            create: jest.fn(),
          },
        },
        {
          provide: getModelToken('SportEvent'),
          useValue: {
            // mock Mongoose Model methods used in the UserService class
          },
        },
      ],
    }).compile();

    userService = module.get<UserService>(UserService);
    userModel = module.get<Model<UserDocument>>(getModelToken('User'));
    neo4jQueryService = module.get<Neo4jQueryService>(Neo4jQueryService);
  });

  it('should be defined', () => {
    expect(userService).toBeDefined();
  });
});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:“TypeError:无法读取未定义的属性(读取'inspectModules')”。我不知道发生了什么。有人知道吗?

Ste*_*cus 7

升级到版本“@nestjs/testing”:^9.3.12