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 中注入一个新的序列化程序,但它会保留以前的序列化程序。然后,那些在开始时被注入的人的池子被摧毁了......然后砰!
我正在使用超级测试(在 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 中注入一个新的序列化程序,但它会保留以前的序列化程序。然后,那些在开始时被注入的人的池子被摧毁了......然后砰!