Jest-тестирование службы, использующей Neo4J и MongoDb, возвращает ошибку: «TypeError: невозможно прочитать свойства неопределенного (чтение« inspectModules »)»

У меня есть служба, которая выполняет запрос к Mongodb и Neo4j. Метод создания запускает два метода: «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.info(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);
    }
  }

Я пытаюсь проверить код выше. Тест, который я пытаюсь сделать, прост, я просто хочу проверить, определен ли 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();
  });
});

Я получаю сообщение об ошибке: «TypeError: невозможно прочитать свойства неопределенного (чтение« inspectModules »)». Я понятия не имею, что происходит. Кто-нибудь знает?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
318
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

[ОБНОВЛЕНО]

Эта ошибка указывает на то, что где-то есть оператор (возможно, в библиотеке), который выглядит примерно так (где foo не определено):

foo.inspectModules(...)

Если у вас есть это в вашем коде, исправьте это. Если его нет в вашем коде, посмотрите, используете ли вы правильные версии библиотек или есть более свежие версии, которые вы можете использовать.

Ответ принят как подходящий

Обновите до версии '@nestjs/testing': ^9.3.12

Спасибо, я уже понял это, но забыл обновить этот пост. Я все равно дам вам кредиты.

MisterQvD 07.04.2023 19:56

Другие вопросы по теме