Mongoose find在jest测试中不返回文档

ymdaylpp  于 2023-03-03  发布在  Go
关注(0)|答案(1)|浏览(116)

我想测试NestJS应用程序是否使用E2 E测试方法向数据库写入了一定数量的文档,其中我的jest测试针对在docker中运行的应用程序执行一些HTTP请求,然后获取mongoDB文档并验证文档数量。
但是我的mongoose模型在执行find({})时总是返回一个空数组
我用mongoDB compass检查了这个集合,它确实包含了这些文档。
我不知道出了什么问题。从应用程序代码导入的模式定义如下

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type MyDocument = MyData & Document;

@Schema({timestamps: true, autoIndex:false, collection: 'my_documents'})
export class MyData {
    @Prop({ required: true })
    message: string;
}

导出常量MySchema =模式工厂.创建类(MyData);
这是测试代码:

import { MyData, MySchema } from 'apps/api/src/app/schema';
import axios from 'axios';
import { connect, model } from 'mongoose';
import { resetDb, sleep } from '../support/helpers';

describe('Post twice, then get', () => {
  beforeEach(async () => {
    await resetDb();
    // let things settle
    await sleep(10000);
  });

  it('should return two messages', async () => {
    const deleteResult = await axios.delete('/');
    expect(deleteResult.status).toBe(200);
    const post1 = await axios.post('/', { message: 'Hello' });
    expect(post1.status).toBe(201);
    const post2 = await axios.post('/', { message: 'Hello2' });
    expect(post2.status).toBe(201);

    const res = await axios.get('/');

    expect(res.status).toBe(200);
    await connect(process.env.MONGODB_URI);
    const myModel = model<MyData>('MyData', MySchema);
    const documents = await myModel.find({});
    console.log(documents);
    expect(documents.length).toBe(2);
  });
});

我创建了一个基于nx monorepo的最小可复制存储库:https://github.com/CodingSpiderFox/nx-neste2e-mcve
要重现API.spec.ts无法成功运行的问题,只需从存储库的根目录下使用命令npx nx e2e api-e2e运行示例即可,目标将自动运行一个脚本来构建和停靠应用程序,并从apps/api-e2e/src/support/global-setup.ts中定义的jest全局设置通过docker compose启动mongodb和应用程序容器

cvxl0en2

cvxl0en21#

这个问题在我身上发生过几次,我查看了您的存储库。我找不到您在测试中使用的相同连接URL(MONGODB_URI)的传递位置。我认为您可以将连接作为第二个参数(app.service.ts)传递到InjectModel

相关问题