Mongoose NestJS Mongo TypeError:this.memberModel不是构造函数

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 {

在我的NestJS应用程序中,我似乎无法理解这个测试。按照连接文档,我在尝试运行
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();
    });
  });
});