【问题标题】:Mock Middleware supplied to req in an Express Route using Jest使用 Jest 在 Express Route 中提供给 req 的模拟中间件
【发布时间】:2019-10-07 08:46:09
【问题描述】:

我有以下快递路线:

app.route(`api/project`).post((req, res) => createProject(req, res))

在之前的代码中,我创建了将 Mongoose 附加到 req 对象的中间件,因此可以在 createProject 中使用 req.mongoose 调用它。

问题是我不知道如何在单元测试中模拟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 对象被传递之前模拟它?

【问题讨论】:

  • 如何在测试中调用createProject 控制器?你能和我们分享一下测试和createProject代码吗?
  • 可能是这样的? npmjs.com/package/mock-req

标签: node.js express mongoose jestjs


【解决方案1】:

我犯的错误是在__mocks__/createProject.js 中,我需要使用jest.requireActual() 来导入真正的createProject.js 文件,如下所示:

const realGetProjectDetails = jest.requireActual('../getProjectDetails')

这消除了循环依赖问题,测试按预期工作。

当它是一小行代码让你追逐你的尾巴几个小时时,一定会喜欢它......:\

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2020-11-04
    • 2022-11-12
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多