我想测试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和应用程序容器
1条答案
按热度按时间cvxl0en21#
这个问题在我身上发生过几次,我查看了您的存储库。我找不到您在测试中使用的相同连接URL(
MONGODB_URI
)的传递位置。我认为您可以将连接作为第二个参数(app.service.ts)传递到InjectModel
。