我有以下Express路线:
app.route(`api/project`).post((req, res) => createProject(req, res))
在先前的代码中,我创建了将Mongoose附加到req
对象的中间件,因此可以在req.mongoose
内使用createProject
来调用它。
问题是在单元测试中使用时,我不知道如何模拟req.mongoose
。
我尝试创建createProject
(如下)的手动模拟,该模拟调用了真实的createProject
,并将req.mongoose
设置为存根,但这导致了StackOverflow错误。
// __mocks__/createProject.js
const { MongoMemoryServer } = require('mongodb-memory-server')
const realCreateProject = require('../createProject')
const mongoose = require('mongoose')
const createProject = async (req, res) => {
const mongoServer = new MongoMemoryServer()
const mongoUri = await mongoServer.getConnectionString()
const options = { useNewUrlParser: true }
await mongoose.connect(mongoUri, options, err => {
if (err) console.error(`ERROR: beforeAll - ${err}`)
})
req.mongoose = mongoose
realCreateProject(req, res)
}
那么,如何在路径中传递req
对象之前将其模拟出来?
答案 0 :(得分:0)
我犯的错误是在__mocks__/createProject.js
中,我需要使用jest.requireActual()
来导入真实的createProject.js
文件,就像这样:
const realGetProjectDetails = jest.requireActual('../getProjectDetails')
这消除了循环依赖问题,并且测试按预期进行。
当一小段代码使您追逐尾巴好几个小时时,一定会喜欢它。...:\