我有一条路线.route(myapp/profile)
.get(myProfileMiddleware.checkAccessToken(),
myProfileController.getProfile
)
这里是中间件方法
checkAccessToken
检查 session token 是否设置如下。
checkAccessToken() {
return (req, rex, next) => {
if (!req.session || !req.session.accessToken) {
// throws 403 Forbidden error
}
// Executes next() method
}}
如果存在访问 token ,则路由执行相应的 Controller 方法myProfileController.getProfile
,否则抛出 403 禁止错误。
我需要为这条路线编写单元测试。我正在使用 mocha、chai、sinon 和 supertest。 我尝试使用“express-session”在请求方法中设置 session 变量,如下所示
app.use(session({accessToken: 'ssshhhhh'}));
还尝试了 set('cookie', ['accessToken=sssh'],但没有成功。 session token 未设置,并且路由显示 403 Forbidden
错误
有人可以为此提供可行的解决方案吗?提前致谢。
我正在使用以下版本:
Node :8.7, Chai :^4.1.0, Mocha :^5.0.4,node-mocks-http:^1.6.6,sinon:^2.3.2 super 测试:^3.0.0
最佳答案
我不确定我是否完全理解你的问题,但是当我使用node-mocks-http
时,我在测试文件中创建mockedRequest时设置了 session 。
const mockRequest = httpMocks.createRequest({
session: { … }
});
然后允许实际的路由处理程序设置 session 属性。
参见the docs关于 .createRequest()
并注意 session
选项。
关于node.js - 在 Node js 单元测试的请求中设置 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455395/