我有以下简单的测试设置:
test('what did I do to deserve this', async () => {
expect.assertions(1)
const data = await fetchData() // or fetchData2
expect(data).toBe('peanut butter')
})
async function fetchData () {
return "peanut butter"
}
async function fetchData2 () {
return knex.select('name').from('foos')
}
当我使用fetchData
笑话愉快地结束
但当我使用fetchData2
时,它会抱怨:
Jest在测试运行完成一秒钟后没有退出。
这通常意味着有一些异步操作在测试中停止。考虑运行Jest
--detectOpenHandles
来解决此问题。
数据变量确实具有来自数据库查询的结果,API中更高级别的其他调用程序将解析查询并继续执行其他语句。
我试过:
--detectOpenHandles
标志,但它没有显示任何内容- 如果是此处描述的问题,则对
fetchData2
进行预期通过 - 向CCD_ 7中的异步函数传递CCD_。它确实存在,但调用它并不能修复警告
- 向它投掷试跳/接球块
感谢您的帮助。
事物的版本:
- 节点v11.1.0
- "笑话":"^23.6.0">
- "knex":"^0.15.2">
要强制关闭Jest而不是DB连接:
--forceExit
所以我的测试脚本看起来像这样,
"scripts": {
"test": "jest --forceExit"
}
您需要在测试套件的末尾调用knex.destroy()
来拆除连接池。
得到这些错误:
1.
工作进程未能正常退出,已被强制退出已退出。这可能是由于测试不正确而导致的泄漏拆除。尝试使用--detectOpenHandles运行以查找泄漏。
Jest在测试运行完成一秒钟后没有退出。
这通常意味着有一些异步操作在测试中停止。考虑运行Jest
--detectOpenHandles
来解决此问题。节点:内部/过程/承诺:246triggerUncaughtException(err,true/*fromPromise*/(;^[未处理的PromiseRejection:此错误由引发在没有catch块的异步函数内部,或者通过拒绝未使用.catch((处理的promise。该promise被拒绝原因";错误:请求失败,状态代码为404"。]{代码:'ERR_UNHANDLED_REJECTION'}##[error]Cmd.exe已退出,代码为"1"。
全局设置和拆卸示例:
// setup.js
const knexConfiguration = require('../config/knex')[process.env.NODE_ENV];
const knex = require('knex');
const setup = async () => {
const client = knex(knexConfiguration)
await client.migrate.latest();
await client.destroy();
};
module.exports = setup;
// teardown.js
const knexConfiguration = require('../config/knex')[process.env.NODE_ENV];
const knex = require('knex');
const teardown = async () => {
const client = knex(knexConfiguration)
await client.migrate.rollback();
await client.destroy();
};
module.exports = teardown;
来源:
https://github.com/facebook/jest/issues/7287#issuecomment-510068325
另一个例子:
dbConnection.js
export default new Sequelize({...}); // The Sequelize instance.
some.spec.js
import dbConnection from './dbConnection';
const { SomeModel } = dbConnection.models;
describe('...', () => {
beforeEach(async () => {
await SomeModel.create({...});
});
...
});
afterAll(async done => {
// Closing the DB connection allows Jest to exit successfully.
dbConnection.close();
done();
});
https://github.com/facebook/jest/issues/7287#issuecomment-434058564