node.js - 在 Node js 单元测试的请求中设置 session

标签 node.js mocha.js sinon chai supertest

我有一条路线.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/

相关文章:

node.js - 使用 VS Code + Mocha 进行调试并在 'read-only inlined content from source map' 文件处停止断点

javascript - Should.js - 确定多个对象中的单个字段与单个对象之间的相等性

javascript - sinon模拟不接听电话

javascript - 使用 JavaScript 在 if 语句中设置变量抛出错误(已声明)

node.js - 如何在 Nuxt 应用程序中部署整个 Wordpress 应用程序?

testing - 需要有关在 Meteor.js 中使用 Chimp.js/Mocha 进行测试的建议

node.js - sinon.js - 如何组织我的 stub ?

javascript - node js可以计算两个输入字段的值并更新另一个字段吗?

node.js - AngularJS 数据绑定(bind)的问题

typescript - 在 typescript 测试中模拟第三方库(ioredis)