Supertest + Knex.js = 当前客户端没有定义池

Supertest + Knex.js = There is no pool defined on the current client

我正在使用超级测试(在 Mocha 中)来测试我的应用程序,该应用程序目前正在使用 knex.js 用于数据库目的。

旧版本的 knex (0.5.x) 一切正常。现在我想使用最新的 knex 版本。

在大多数情况下,使用

request = supertest(app)

对我来说工作正常,但还有其他情况我需要在不重复使用 cookie 的情况下测试多个请求,所以...

request = supertest.agent(app)

这会发生什么?

它以主题中描述的错误结束。我在 knex 库中添加了一些自定义日志 'acquireConnection'、'releaseConnection'、'initializePool' 和 'destroy' 函数以查看发生了什么,输出类似于:

Adquiring connection from pool {someCustomPoolIdYSet)
Adquiring connection from pool {someCustomPoolIdYSet)
Releasing connection from pool {someCustomPoolIdYSet)
Adquiring connection from pool {someCustomPoolIdYSet)
Adquiring connection from pool undefined
[Error] ........ "There is no pool defined on the current client"

如有任何帮助,我们将不胜感激。 提前致谢。

所以,我们终于找到了!

问题是 Passport.js,默认情况下它总是被用作单例。每次我们 bootstrap 应用程序时,都会在 Passport 中注入一个新的序列化程序,但它会保留以前的序列化程序。然后,那些在开始时被注入的人的池子被摧毁了......然后砰!