Я новичок в 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)
}