Mongodb 在jest测试中使用nestjs调用mongoose服务时出现问题

Mongodb 在jest测试中使用nestjs调用mongoose服务时出现问题,mongodb,mongoose,jestjs,nestjs,Mongodb,Mongoose,Jestjs,Nestjs,目前我正在尝试测试我的服务,但总是失败并打印错误,即使应用程序运行正常且服务正常 错误 新闻服务.ts import { NewsService } from './news.service'; import { Model } from 'mongoose'; import { News, NewsSchema } from './schemas/news.schema'; import { getModelToken } from '@nestjs/mongoose'; describe(

目前我正在尝试测试我的服务,但总是失败并打印错误,即使应用程序运行正常且服务正常

错误

新闻服务.ts

import { NewsService } from './news.service';
import { Model } from 'mongoose';
import { News, NewsSchema } from './schemas/news.schema';
import { getModelToken } from '@nestjs/mongoose';

describe('NewsService', () => {
  let service: NewsService;
  const mockRepository = (...args: any[]) => { };

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [NewsService, { provide: getModelToken(News.name), useFactory: mockRepository }],
    }).compile();

    service = module.get<NewsService>(NewsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
  describe('get news', () => {
    it('should get all news', async () => {
      service
        .findAll()
        .then((allNews) => {
          console.log(allNews);
          expect(allNews).toBeDefined();
        })
        .catch((error) => {
          console.log(error);
        });
    });
  });
});
import { Document } from 'mongoose';

export type NewsDocument = News & Document;

@Schema()
export class News extends Document {
  @Prop({ unique: true })
  id: string;

  @Prop()
  title: string;

  @Prop()
  date: string;
}

export const NewsSchema = SchemaFactory.createForClass(News);
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { News } from './schemas/news.schema';

@Injectable()
export class NewsService {
  constructor(
    @InjectModel(News.name) private readonly newsModel: Model<News>
  ) {}

  public async findAll(): Promise<News[]> {
    return await this.newsModel
      .find()
      .sort([['date', 'descending']])
      .exec();
  }
}
错误

TypeError:无法读取未定义的属性“plugin”
5 | 
6 |@Schema()
>7 |导出类新闻文件{
| ^
8 |@Prop({unique:true})
9 | id:字符串;
10 | 
在News.Object..Document.$\u setSchema(../node\u modules/mongoose/lib/Document.js:3028:10)
在新文档中(../node_modules/mongoose/lib/Document.js:86:10)
在新新闻中(News/schemas/News.schema.ts:7:1)
在InstanceWrapper.mockRepository[作为元类型](news/news.service.spec.ts:13:7)
在Injector.instanceClass(../node_modules/@nestjs/core/Injector/Injector.js:293:55)
回调时(../node_modules/@nestjs/core/injector/injector.js:77:41)

你的
mockRepository
与你测试的
newsModel
方法完全不同。它没有
find
方法,因此会出错。你的测试需要与他们要替换的东西有相同的接口,否则它们就没用了。我明白了……我一直试图用很多方法定义它,但都没有用s、 你能帮我一下吗?你尝试了什么方法?给出一个答案。我编辑我的帖子是为了添加我应用的唯一体面的方法。我对此感到很失落。你的
mockRepository
与你正在测试的
newmodel
方法完全不同。它没有
find
方法,因此出现了错误。你的测试需要加倍我明白了…我一直试图用很多方法来定义它,但都没有用,你能帮我吗?你尝试了哪些方法?给出一个答案。我编辑我的帖子来添加我应用的唯一体面的方法。我对你感到很迷茫
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { News } from './schemas/news.schema';

@Injectable()
export class NewsService {
  constructor(
    @InjectModel(News.name) private readonly newsModel: Model<News>
  ) {}

  public async findAll(): Promise<News[]> {
    return await this.newsModel
      .find()
      .sort([['date', 'descending']])
      .exec();
  }
}
const mockRepository = (...args: any[]) => {
    findAll: jest.fn().mockReturnValue([
      new News({
        id: '1',
        title: 'title',
        date: 'date',
      }),
    ]);
  };

TypeError: Cannot read property 'plugin' of undefined

       5 | 
       6 | @Schema()
    >  7 | export class News extends Document {
         | ^
       8 |   @Prop({ unique: true })
       9 |   id: string;
      10 | 

      at News.Object.<anonymous>.Document.$__setSchema (../node_modules/mongoose/lib/document.js:3028:10)
      at new Document (../node_modules/mongoose/lib/document.js:86:10)
      at new News (news/schemas/news.schema.ts:7:1)
      at InstanceWrapper.mockRepository [as metatype] (news/news.service.spec.ts:13:7)
      at Injector.instantiateClass (../node_modules/@nestjs/core/injector/injector.js:293:55)
      at callback (../node_modules/@nestjs/core/injector/injector.js:77:41)