Node.js 超级测试&x2B;Knex.js=当前客户端上没有定义池

Node.js 超级测试&x2B;Knex.js=当前客户端上没有定义池,node.js,mocha.js,supertest,knex.js,Node.js,Mocha.js,Supertest,Knex.js,我正在使用supertest(在Mocha中)测试我的应用程序,该应用程序目前正在使用knex.js进行数据库测试 使用旧版本的knex(0.5.x),一切都很好。现在我想使用最新的knex版本 在大多数情况下,使用 request = supertest(app) 这对我来说很好,但是还有一些场景我需要在不重用cookies的情况下测试多个请求,所以 request = supertest.agent(app) 这会怎么样 它以主题处描述的错误结束。我在knex库中添加了一些自定义日志“a

我正在使用supertest(在Mocha中)测试我的应用程序,该应用程序目前正在使用knex.js进行数据库测试

使用旧版本的knex(0.5.x),一切都很好。现在我想使用最新的knex版本

在大多数情况下,使用

request = supertest(app)
这对我来说很好,但是还有一些场景我需要在不重用cookies的情况下测试多个请求,所以

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上,默认情况下,它总是作为单例使用。每次我们引导应用程序时,Passport中都注入了一个新的序列化程序,但它保留了以前的序列化程序。然后,那些刚开始注射的人的游泳池被摧毁了。。。轰

那么您的解决方案是什么呢?在应用程序中也创建Passport引导。然后,每次启动应用程序时,都会出现一个新的Passport实例,并注入一个新的序列化程序(带有对最近需要的DB的新引用),就是这样。