Поддельное промежуточное программное обеспечение, поставляемое для запроса в экспресс-маршруте с использованием Jest - PullRequest
0 голосов
/ 21 мая 2019

У меня есть следующий экспресс-маршрут:

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 на маршруте до того, как он пройдет по линии?

1 Ответ

0 голосов
/ 22 мая 2019

Ошибка, которую я сделал, заключалась в том, что в __mocks__/createProject.js мне нужно было использовать jest.requireActual() для импорта реального файла createProject.js, например:

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

Это избавляет от циклическогоПроблема с зависимостями и тестирование работают, как и ожидалось.

Должен любить его, когда одна маленькая строчка кода отправляет вас в погоню за хвостом в течение нескольких часов ....: \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...