使用 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 timeoutconnectMongoose 函数中不需要那里。如果你想使用 jest timeout 你可以在 beforeEach 中使用它> 功能。

【讨论】:

对不起,这仍然导致测试超时

以上是关于使用 mongodb-memory-server 进行测试失败/超时的主要内容,如果未能解决你的问题,请参考以下文章

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”