NodeJS超级访问会话对象

use*_*306 10 javascript session mocha.js node.js supertest

我用supertest测试我的Node.js应用程序.在我的控制器中,我访问会话对象.为了生成有效请求,此会话对象需要填充一些数据.

调节器

        // determine whether it is user's own profile or not
        var ownProfile = userId == req.session.user._id ? true : false;
Run Code Online (Sandbox Code Playgroud)

测试

it('profile', function (done) {
    testUserOne.save(function(error, user){

        request
            .agent(server)
            .get('/profile?userId=' + user._id)
            .expect('Content-Type', /html/)
            .expect(200)
            .expect(/Profile/)
            .end(done);
    })
});
Run Code Online (Sandbox Code Playgroud)

如何模拟req/session对象?

Ton*_*gan 9

这个新的lib应该可以解决这个问题:

您可能还会看一下superagent,它是supertest的一部分.这是一个很好的教程:

不想要另一个lib?试试这个......


小智 9

只需使用子应用程序,并在parent-app上调用authenticated():

var mockApp = express();
mockApp.use(session);
mockApp.all('*', function(req, res, next) {
    //authenticated(req, res, next);
    //OR
    req.session.uid = 'mock uid';
    next();
});
mockApp.use(app);
Run Code Online (Sandbox Code Playgroud)

您的所有路线都会在匹配前进行身份验证!

  • @nishant `mockApp.use(app)` 实际上用原始应用程序扩展了mockApp,因此会话覆盖处理程序被插入到原始应用程序中。值得注意的是,测试中应该使用“mockApp”:“request(mockApp)…”。感谢您指出这一点! (3认同)
  • 你能添加会话的实例化吗? (2认同)