javascript - 使用 Jest 时 Knex 离开开放服务器(推荐)
问题描述
我正在尝试用我的以下堆栈做一些 TDD
- 笑话
- 节点
- Koa2
- 超测
- 内克斯
- 异议
我的问题从 koa 服务器的打开处理程序开始,我可以用服务器实例解决这个问题,然后用server.close()
但是,我有同样的问题knex
;它使服务器保持打开状态,我必须运行它knex.close
才能停止它。这样我就可以避免以下错误消息
测试运行完成后一秒钟,Jest 没有退出。
这通常意味着在您的测试中存在未停止的异步操作。考虑使用 --detectOpenHandles 运行 Jest 来解决此问题。
knex.config
const config = {
development: {
client: 'pg',
connection: process.env.DATABASE_URL,
migrations:{
directory:"./migrations/"
},
pool: { min: 0, max: 7 }
},
test: {
client: 'pg',
connection: process.env.DATABASE_URL,
migrations:{
directory:"./migrations/"
},
pool: { min: 0, max: 7 }
},
//TBD
staging: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
},
//TBD
production: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
}
}
module.exports = config;
用户模型.js
'use strict';
const knex = require('../config/db/knex');
const { Model } = require('objection');
Model.knex(knex);
class User extends Model {
// Table name is the only required property.
static get tableName() {
return 'user';
}
// Custom function to close knex
static close() {
knex.destroy();
}
}
module.exports = User;
user.test.js
const supertest = require('supertest');
const server = require('../../server');
var request = require("supertest").agent(server);
describe("Test users routes", () => {
let Model;
beforeAll(async () => {
// do something before anything else runs
console.log('Jest starting!');
Model = require('../../models/user.model')
});
// close the server after each test
afterAll(() => {
server.close();
Model.close();
console.log('server closed!');
});
test("Get /",async () => {
let res = await request.get('/users/');
expect(res.status).toBe(200);
});
});
我很确定这可能是我所做的更好的方法解决方案,可能与池相关或 knex.cofing 上的一些回调,但我不确定。
谢谢
解决方案
推荐阅读
- spring - CLOSED - 无法执行目标 org.springframework.boot:spring-boot-maven-plugin:2.1.2.RELEASE:run
- python-3.x - 列出清单的问题
- google-bigquery - 将可空字段恢复为必填
- r - URL书签R闪亮
- c# - 如何获取适用于 iOS 设备的 Azure 通知中心 RegistrationId?
- python - 我无法使用 Pyinstaller 打包我的程序,因为我安装了 enum34,无法卸载,因为使用过的模块需要它。有什么建议么?
- tensorflow - TFRrecordDataset:为什么以及何时使用缓冲区大小?
- php - 如何使 PhpStorm (JetBrains) 在 PHP 中强制区分函数名的大小写
- c# - Npoi ICell.DateCellValue 返回 NullReferenceException
- modelica - 参数定义部分是否可以有一个 if 块(不仅仅是一个语句)?