#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);
});
});
});