使用 mongodb-memory-server 进行测试失败/超时
Posted
技术标签:
【中文标题】使用 mongodb-memory-server 进行测试失败/超时【英文标题】:Test using mongodb-memory-server is failing/timing out 【发布时间】:2021-03-09 22:02:07 【问题描述】:我正在后端设置 mongodb-memory-server 用于测试目的,并且在运行需要调试的测试时遇到了一些问题。我的问题是,当我运行我的测试(这将在正在测试的服务中的某处创建一个 mongodb 文档)时,测试超时。
据我了解,这是因为在执行测试并尝试在测试期间创建新的 mongo doc 时,我控制台日志 mongoose.connection.readyState 显示为 0,表示 mongoose 已断开连接。这对我来说很奇怪,因为我在我的 connectMongoose() 函数中添加了控制台日志(如下图所示),它说 mongoose 已连接。
所以我的主要问题是为什么它说 mongoose 在 connectMongoose() 结束时连接,但它说它在执行单元测试/服务功能期间断开连接?如何确保 MongoDB-memory-server 在测试执行之前完全连接?
下面是我如何进行猫鼬测试连接的屏幕截图:
下面是使用 mongodb-memory-server 的确切位置和方式的屏幕截图:
这是我的 jest.config.js 的截图:
最后是测试失败的实际测试文件(我在问什么):
【问题讨论】:
请提供实际代码而不是截图。 鉴于此问题需要编辑以删除图像,并且需要更多详细信息才能解决,我投票暂时搁置它。 【参考方案1】:beforeAll(connectMongoose)
beforeEach(clearDatabase)
afterAll(disconnectMongoose)
您这里的三个函数是异步函数,但您不等待它们 - connect Mongoose
是否有可能在承诺仍在等待时返回,而尽管异步函数尚未完成,其他代码仍在继续?
也许这会更好地满足您的目的?
beforeAll(() =>
await connectMongoose
)
【讨论】:
对不起,这仍然导致测试超时【参考方案2】:之前:
beforeAll(connectMongoose)
beforeEach(clearDatabase)
afterAll(disconnectMongoose)
之后:
beforeAll(async() => await connectMongoose)
beforeEach(async() => await clearDatabase)
afterAll(async () => await disconnectMongoose)
原因是你应该等到猫鼬连接完全完成并删除 set timeout 在 connectMongoose 函数中不需要那里。如果你想使用 jest timeout 你可以在 beforeEach 中使用它> 功能。
【讨论】:
对不起,这仍然导致测试超时以上是关于使用 mongodb-memory-server 进行测试失败/超时的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?