在请求节点js单元测试中设置会话

时间:2018-03-23 17:30:50

标签: node.js mocha sinon chai supertest

我有一条路线.route(myapp/profile) .get(myProfileMiddleware.checkAccessToken(), myProfileController.getProfile )

这里是中间件方法

  

checkAccessToken

检查会话令牌是否设置如下。

checkAccessToken() { 
return (req, rex, next) => {      
  if (!req.session || !req.session.accessToken) {
   // throws 403 Forbidden error
  }
  // Executes next() method      
}}

如果存在访问令牌,则路由执行相应的控制器方法myProfileController.getProfile,否则抛出403禁止错误。

我需要为这条路线编写单元测试。我正在使用 mocha,chai,sinon和supertest 。 我尝试使用" express-session "在请求方法中设置会话变量。如下

app.use(session({accessToken: 'ssshhhhh'}));

还尝试了设置(' cookie',[' accessToken = sssh'],但没有用。会话令牌未设置且路由显示403 Forbidden错误

有人可以为此提供有效的解决方案吗?提前谢谢。

我使用的是以下版本:

节点:8.7,chai:^ 4.1.0,mocha:^ 5.0.4,node-mocks-http:^ 1.6.6,sinon:^ 2.3.2 supertest:^ 3.0.0

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您的问题,但是当我使用node-mocks-http时,我在测试文件中创建了mockedRequest时便设置了会话。

const mockRequest = httpMocks.createRequest({
  session: { … }
});

然后允许实际的路由处理程序设置会话属性。

有关.createRequest(),请参见the docs,并注意session选项。