Mongodb 在jest测试中使用nestjs调用mongoose服务时出现问题
目前我正在尝试测试我的服务,但总是失败并打印错误,即使应用程序运行正常且服务正常 错误 新闻服务.tsMongodb 在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(
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)