Mongoose NestJS Mongo TypeError:this.memberModel不是构造函数
在我的NestJS应用程序中,我似乎无法理解这个测试。按照连接文档,我在尝试运行Mongoose NestJS Mongo TypeError:this.memberModel不是构造函数,mongoose,jestjs,nestjs,Mongoose,Jestjs,Nestjs,在我的NestJS应用程序中,我似乎无法理解这个测试。按照连接文档,我在尝试运行createMemberspec时收到下面屏幕截图中的错误。我已经在下面添加了服务及其相应的spec。公开回购是一种有效的方式 非常感谢您的帮助 import { Model } from 'mongoose'; import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import {
createMember
spec时收到下面屏幕截图中的错误。我已经在下面添加了服务及其相应的spec。公开回购是一种有效的方式
非常感谢您的帮助
import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Member } from './member.interface';
import { CreateMemberDto } from './dto/create-member-dto';
@Injectable()
export class MembersService {
members = [
{ firstName: 'Jake', lastName: 'Miller', lineName: 'State Farm' },
];
constructor(@InjectModel('Member') private readonly memberModel: Model<Member>) {}
async getMembers(): Promise<Member[]> {
return await this.memberModel.find().exec();
}
async createMember(createMemberDto: CreateMemberDto): Promise<Member> {
const createdMember = new this.memberModel(createMemberDto);
return await createdMember.save();
}
}
从“猫鼬”导入{Model};
从'@nestjs/common'导入{Injectable};
从'@nestjs/mongoose'导入{InjectModel};
从“/Member.interface”导入{Member};
从“./dto/create member dto”导入{CreateMemberDto};
@可注射()
导出类成员服务{
成员=[
{名字:“杰克”,姓氏:“米勒”,行名:“国营农场”},
];
构造函数(@InjectModel('Member')私有只读memberModel:Model){}
异步getMembers():承诺{
return等待这个.memberModel.find().exec();
}
异步createMember(createMemberDto:createMemberDto):承诺{
const createdMember=newthis.memberModel(createMemberDto);
返回wait wait createdMember.save();
}
}
从'@nestjs/testing'导入{Test};
从'@nestjs/mongoose'导入{MongooseModule,getModelToken};
从“/members.service”导入{MembersService};
常量成员=[
{名字:“杰克”,姓氏:“米勒”,行名:“国营农场”},
];
描述('MembersService',()=>{
让会员服务;
beforeach(异步()=>{
const module=await Test.createTestingModule({
供应商:[
会员服务,
{
提供:getModelToken(“成员”),
使用价值:{
find:jest.fn().mockReturnThis(),
exec:jest.fn().mockResolvedValue(成员),
},
},
],
}).compile();
membersService=等待模块.get(membersService);
});
描述('getMembers',()=>{
它('调用getMembers并返回成员数组',()=>{
expect(membersService.getMembers()).resolves.toEqual(members);
});
});
描述('createMember',()=>{
它('调用membersService.createMember并返回结果',async()=>{
const save=jest.fn().mockResolvedValue(true);
expect(save).not.tohavebeencall();
const result=await members服务.createMember('newMember');
expect(save).toHaveBeenCalled();
});
});
});
嗨,看看@PooyaHaratian,它确实奏效了,但我不明白为什么。是否有资料可以解释这种变通方法?我不熟悉Jest和NestJs实际上这没什么特别的,在正式的NestJs文档中,他们使用一个对象来模拟猫鼬,它将作为
this.memberModel
在您的服务中使用。所以在createUser方法中,您将该对象作为类调用,这就是错误的原因。我没有看到所有文档,所以我不知道。你知道这在文档中的什么地方吗?你介意粘贴你的答案或参考下面你答案的链接,这样我就可以把它标记为我的正式答案并给你评分吗?嗨,看看@PooyaHaratian,它奏效了,但我不明白为什么。是否有资料可以解释这种变通方法?我不熟悉Jest和NestJs实际上这没什么特别的,在正式的NestJs文档中,他们使用一个对象来模拟猫鼬,它将作为this.memberModel
在您的服务中使用。所以在createUser方法中,您将该对象作为类调用,这就是错误的原因。我没有看到所有文档,所以我不知道。你知道这在文档中的什么地方吗?你介意粘贴你的答案或参考下面你答案的链接,这样我就可以把它标记为我的正式答案并给你评分吗?
import { Test } from '@nestjs/testing';
import { MongooseModule, getModelToken } from '@nestjs/mongoose';
import { MembersService } from './members.service';
const members = [
{ firstName: 'Jake', lastName: 'Miller', lineName: 'State Farm' },
];
describe('MembersService', () => {
let membersService;
beforeEach(async () => {
const module = await Test.createTestingModule({
providers: [
MembersService,
{
provide: getModelToken('Member'),
useValue: {
find: jest.fn().mockReturnThis(),
exec: jest.fn().mockResolvedValue(members),
},
},
],
}).compile();
membersService = await module.get<MembersService>(MembersService);
});
describe('getMembers', () => {
it('calls getMembers and returns an array of Members', () => {
expect(membersService.getMembers()).resolves.toEqual(members);
});
});
describe('createMember', () => {
it('calls membersService.createMember and returns result', async () => {
const save = jest.fn().mockResolvedValue(true);
expect(save).not.toHaveBeenCalled();
const result = await membersService.createMember('newMember');
expect(save).toHaveBeenCalled();
});
});
});