Ошибка типа: не удается прочитать свойство 'close' из неопределенного - PullRequest
0 голосов
/ 06 ноября 2018

Я новичок в nodejs и koa. Это существующее приложение Koa (работает и работает без проблем), в котором я пытаюсь написать тестовый код, используя Jest. Я искал примеры тестов, которые могут быть применены к этому случаю, но безрезультатно. Теперь у меня есть эта ошибка, когда я запускаю свой тестовый код TypeError: Cannot read property 'close' of undefined. Я знаю, что с моей инициацией переменной server из ret.

что-то не так.

Кстати, console.log(ret) возвращает undefined:

[nodemon] restarting due to changes...
[nodemon] starting `node index.js`
undefined
Mongoose default connection open to mongodb://localhost/giantsoftdata
Listening to port: 3000

Вот существующее приложение, которое я хочу протестировать с помощью npm run test:

// index.js
const Koa = require('koa')
const KoaBodyParser = require('koa-bodyparser')
const KoaErrorHandler = require('@giansoft/lib-errors/lib/koaHandler')
const PORT = 3000
const app = new Koa()
const router = require('./api/rest/router')()
const dbconnect = require('./database')
const dbstatus = require('./database/dbstatus')

app
  .use(KoaErrorHandler)
  .use(dbstatus())
  .use(KoaBodyParser())

const ret = dbconnect( async function () {
  app
      .use(router.routes())
      .use(router.allowedMethods())
  app.listen(PORT, () => {
      console.log(`Listening to port: ${PORT}`)
  })
  return app;
})
// console.log(ret)
module.exports = ret;

Вот мой тестовый код:

// index.test.js
const server = require("../index");
const request = require("supertest");

afterEach(() => {
  server.close();
});

describe('routes: /status', () => {
  test('Should respond {Status : "Ok"}.', async () => {
    const response = await request(server).get('/status');
    expect(response.status).toEqual(200);
    expect(response.type).toEqual('application/json');
  });
});

Вот это ./database/index.js

const mongoose = require('mongoose')
const dbConfig = require('../config').db

const dbconnect = (callback) => {
  let connString = `mongodb://${dbConfig.host}`
  if (dbConfig.username && dbConfig.password) {
    connString = `mongodb://${dbConfig.username}:${dbConfig.password}@${dbConfig.host}`
  }

  mongoose.connect(connString, { useNewUrlParser: true, useCreateIndex: true })

  mongoose.connection.on('open', function () {
    callback()
  })

  mongoose.connection.on('connected', function () {
    console.log('Mongoose default connection open to ' + connString)
  })

  mongoose.connection.on('error', function (err) {
    console.log('Mongoose default connection error: ' + err)
  })

  mongoose.connection.on('disconnected', function () {
    console.log('Mongoose default connection disconnected')
  })

  process.on('SIGINT', function () {
    mongoose.connection.close(function () {
      console.log('Mongoose default connection closed through app termination')
      process.exit(0)
    })
  })
}

module.exports = (callback) => {
  dbconnect(callback)
}

1 Ответ

0 голосов
/ 06 ноября 2018

Обновленный файл - ./database/index.js

const mongoose = require('mongoose')
const dbConfig = require('../config').db

const dbconnect = (callback) => {
  let connString = `mongodb://${dbConfig.host}`
  if (dbConfig.username && dbConfig.password) {
    connString = `mongodb://${dbConfig.username}:${dbConfig.password}@${dbConfig.host}`
  }

  mongoose.connect(connString, { useNewUrlParser: true, useCreateIndex: true })

  mongoose.connection.on('open', function () {
    callback()
  })

  mongoose.connection.on('connected', function () {
    console.log('Mongoose default connection open to ' + connString)
  })

  mongoose.connection.on('error', function (err) {
    console.log('Mongoose default connection error: ' + err)
  })

  mongoose.connection.on('disconnected', function () {
    console.log('Mongoose default connection disconnected')
  })

  process.on('SIGINT', function () {
    mongoose.connection.close(function () {
      console.log('Mongoose default connection closed through app termination')
      process.exit(0)
    })
  });
  return mongoose.connection;
}

module.exports = (callback) => {
  return dbconnect(callback)
}
...