Что мне следует сделать, чтобы выполнить следующий тест на мангусте nestjs?

#mongodb #mongoose #nestjs

Вопрос:

В настоящее время я работаю над проектом с Мангустом в качестве nestjs и пишу тестовый код с помощью jest.

Тестовый код продолжает выдавать ошибки, и я не думаю, что желательно исправлять служебный код для их решения.

Как я могу исправить код, если выводится ошибка ниже, и мы больше не можем ее протестировать?

 // error

  ● LikeService › like Service findGame test › like Service findGame test (success)

    TypeError: this.gameModel is not a constructor

      28 |              findGame.view = view;
      29 |
    > 30 |              return await new this.gameModel(findGame).save();
         |                           ^
      31 |      }
      32 |
      33 |      // 

      at LikeService.findGame (domain/like/like.service.ts:30:16)
      at Object.<anonymous> (domain/like/like.service.spec.ts:65:19)

 
 // like.service.ts

async findGame(gameId: string) {
        const findGame = await this.gameModel.findOne({ _id: gameId });

        if (!findGame) {
            throw new NotFoundGameException();
        }

        const view = findGame.view   1;
        findGame.view = view;

        return await new this.gameModel(findGame).save();
    }
 
 // like.service.spec.ts

const mockUserModel = {
    findOne: jest.fn()
};

const mockGameModel = {
    findOne: jest.fn(),
    save: jest.fn()
};

type MockModel<T = any> = Partial<Record<keyof Model<T>, jest.Mock>>;

describe("LikeService", () => {
    let service: LikeService;
    let userModel: MockModel<User>;
    let gameModel: MockModel<Game>;

    beforeEach(async () => {
        const module: TestingModule = await Test.createTestingModule({
            providers: [
                LikeService,
                {
                    provide: getModelToken("User"),
                    useValue: mockUserModel
                },
                {
                    provide: getModelToken("Game"),
                    useValue: mockGameModel
                }
            ]
        }).compile();

        service = module.get<LikeService>(LikeService);
        userModel = module.get<MockModel<User>>(getModelToken("User"));
        gameModel = module.get<MockModel<Game>>(getModelToken("Game"));
    });

    describe("like Service findGame test", () => {
        const game = {
            _id: "618a0b27659e61d629686ae7",
            updateDt: "2021-11-09T05:43:35.836Z",
            createDt: "2021-11-09T05:43:35.836Z",
            view: 0,
            description: "testGame",
            gameName: "testName",
            project: {},
            like: {}
        };

        const gameId = "618a0b27659e61d629686ae7";

        it("like Service findGame test (success)", async () => {
            // given
            mockGameModel.findOne.mockResolvedValue(game);
            game.view = game.view   1;
            mockGameModel.save.mockResolvedValue(game);

            // when
            const result = await service.findGame(gameId);

            // then
            expect(mockGameModel.findOne).toHaveBeenCalledTimes(1);
            expect(mockGameModel.findOne).toHaveBeenCalledWith(gameId);
            expect(result).toEqual(game);
        });
    });
});